Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> классы 
:(
    Опции темы
andrew_121
Дата 12.6.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(elenSV @  12.6.2009,  12:56 Найти цитируемый пост)
мне препод сказал что надо создать от этого класса производный класс, который запоминает все действия и создать иерархию классов

Но я же этого не знал.

Цитата(elenSV @  12.6.2009,  12:56 Найти цитируемый пост)
у меня вообще нет четкого представления как это сделать

 smile Так программы не пишутся!


Я вот(пока ты отвечала) подумал что тебе нужно нечто вроди:
Код

class Record {
/* Я так представляю что "запись на кассете" содержит в себе какие-то элементы. Допустим слова.
   Тогда:
 */
    typedef std::string word;/* Элемент описывающий слово в записи. */
    std::vector<word> words;
};

class Cassete {
/* Кассета представляет собой коллекцию записей приведенных выше.
 */
    std::vector<Record> records;
};

class Magnitofon {
/* Ну и сам Магнитофон, который все перечисленым выше, управляет.
 */
};




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
elenSV
Дата 12.6.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



то есть  Magnitofon является главным классом
Record записывает операции
а зачем Cassete?

а вот скажем если будет два класса handmagnitofon и magnitofon - записывающий в список
как будет осуществляться связь между ними
вот это сдезь надо?:
handmagnitofon::handmagnitofon():magnitofon()
{}
handmagnitofon::handmagnitofon(m_play)............

 
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(elenSV @  12.6.2009,  13:35 Найти цитируемый пост)
а зачем Cassete?

Ну...на сколько мне известно, на кассете может быть несколько записей. Т.е. Класс Cassete, содержит в себе массив записей, и операции для манипуляции с ними.
Цитата(elenSV @  12.6.2009,  13:35 Найти цитируемый пост)
вот это сдезь надо?:
handmagnitofon::handmagnitofon():magnitofon()
{}
handmagnitofon::handmagnitofon(m_play)............

 smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
elenSV
  Дата 12.6.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



у меня кроме этого ничего не выходит
я вообще на измене
magnitofon.h
Код

#ifndef MAGNITOFON_H
#define MAGNITOFON_H
class magnitofon
{
private:
   bool play, stop, rec, kasset, kaseta;        // Процессы: воспроизведение, запись и наличие кассеты
   int rew;                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
   public:
   magnitofon();              // Конструктор   
   ~magnitofon(); //деконструктор  
   void m_stop();       // Метод останавливает все процессы видеомагнитофона
   void m_play();       // Метод включает воспроизведение кассеты
   void m_rew(int interval);  // Метод перематывает кассету в заданном направление
   void m_rec();        // Метод начинает запись
   void insert();              // Метод вставляет кассету
   void get();               // Метод достаёт кассету      
   bool check();            // Метод проверяет, есть ли кассета
};
#endif //  MAGNITOFON_H_INCLUDED
#ifndef HAND_H_INCLUDED
#define HAND_H_INCLUŜDED
//#include "magnitofon.h"
class handmagnitofon:public magnitofon{
    public:
    handmagnitofon();
  void m_stop();       // Метод останавливает все процессы видеомагнитофона
   void m_play();       // Метод включает воспроизведение кассеты
   void m_rew(int interval);  // Метод перематывает кассету в заданном направление
   void m_rec();        // Метод начинает запись
   void insert();              // Метод вставляет кассету
   void get();               // Метод достаёт кассету      
   bool check();            // Метод проверяет, есть ли кассета
~handmagnitofon();
};

magnitofon.cpp
Код

#include <iostream>
#include "magnitofon.h"
using namespace std;

magnitofon::magnitofon()           // Конструктор
 {
    play = false;
    stop = false;       // По-умолчанию все процессы выключены
    rec = false;
    rew = 0;
    kasset = false;    // По-умолчванию кассеты нет
 }
magnitofon::~magnitofon()           // деконструктор
{
} 
 void m_stop()                                   // Метод останавливает все процессы видеомагнитофона
        {
                play = false;
                rec = false;
                rew = 0;
                        }
 
        void m_play()                                   // Метод включает воспроизведение кассеты
        {
                m_stop();                                       // Может быть активен только один процесс, поэтому вызывается метод "Stop"
                play = true;
                        }
 
        void m_rew(int interval)                // Метод перематывает кассету в заданном направление
        {
                m_stop();
                rew = interval;                         // Перемотка на заданный интервал
                       }
 
        void m_rec()                                    // Метод начинает запись
        {
                if (play) rec = true;           // Запись возможна только при включённом процессе play
               
        }
 
        void insert()                                   // Метод вставляет кассету
        {
                m_stop();
                kasset = true;
                
        }
 
        void eject()                                              // Метод достаёт кассету      
        {
                m_stop();
                kasset = false;
             
        }
 
        bool check()                                    // Метод проверяет, есть ли кассета
        {
                return kasset;                          // Возвращает true, если кассета есть, в противном случае false.
        }
 
       
//#include "hand.h"
#include <iostream>
handmagnitofon::handmagnitofon():magnitofon()
{}
handmagnitofon::handmagnitofon(m_play)::magnitofon(m_play)
handmagnitofon::handmagnitofon(m_stop)::magnitofon(m_stop)
handmagnitofon::handmagnitofon(m_rec)::magnitofon(m_rec)....
...........
 void outListDat()
        {
                vector<string>::iterator it;
                for(it = ListDat.begin(); it != ListDat.end(); ++it)
                        cout<<*it<<endl;
        }
};

и где записать ListDat.push_back("m_stop"); и т.д.
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



elenSV, Это я уже видел. Начни с утверждения синтаксиса хранения записей/кассет.
Реализуй чтение/запись кассет.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
elenSV
Дата 12.6.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



а почему чтение/запись кассет нельзя через  ListDat.push_back("m_stop");  ListDat.push_back("m_play"); и т.д. реализовать?
для этого надо отдельный класс?
что надо записывать в этих классах?
class Record 
class Cassete 
class Magnitofon 
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(elenSV @  12.6.2009,  16:44 Найти цитируемый пост)
а почему чтение/запись кассет нельзя через  ListDat.push_back("m_stop");  ListDat.push_back("m_play"); и т.д. реализовать?

Кассета содержит записи. Запись содержит слова. Как ты это через аргумент передавать будешь?



Цитата(elenSV @  12.6.2009,  16:44 Найти цитируемый пост)
для этого надо отдельный класс?
что надо записывать в этих классах?

Вот набросал. Не проверял.
Код


#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>

typedef std::string word;
typedef std::vector<word> words;
/***************************************************************************/

class Record {
    words words;
public:
    Record():words() {}
    Record(const std::string& b):words() { load(b); }
    ~Record() {}
    /*  */
    void load(const std::string& b) {
        std::stringstream buf(b);
        word word;

        while ( buf.eof() ) {
            buf >> word;
            words.push_back(word);
        }
    }
    void save(std::string& b) {
        std::stringstream buf;
        words::iterator it = words.begin();
        while ( it != words.end() ) {
            buf << *it << (it == words.end()) ? "" : " ";
            ++it;
        }
        b = buf.get();
    }
    void add(const word& w) {
        if ( w.empty() ) return;
        words.push_back(w);
    }
    bool contains(const word& w) const {
        words::const_iterator it = words.begin();
        while ( it != words.end() ) {
            if ( *it == w ) return true;
            ++it;
        }
        return false;
    }
};

/***************************************************************************/

int main(int argc, char** argv) {
    std::string str;
    std::fstream in("records.txt", std::ios::in);
    if ( !in ) {
        std::cout << "Can`t open records file. Terminate!\n";
        return 1;
    }
    Record rec;
    while ( !in.eof() ) {
        std::getline(in, str);
        rec.load(str);
    }

    return 0;
}

/***************************************************************************/



Добавлено через 2 минуты и 42 секунды
Вот пример файла записей.
первая цифра - номер кассеты. Вторая - номер записи.
Объект еще сырой. Доделаю.

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  records.txt 0,36 Kb


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zim22
Дата 12.6.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(elenSV @  12.6.2009,  12:56 Найти цитируемый пост)
у меня вообще нет четкого представления как это сделать

вы пробовали читать учебник по С++? 


--------------------
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



zim22, Я так думаю что тот код что она привела, написан ею. Ну это уже что-то. Но то что в соседнем топике про калькулятор smile



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
elenSV
Дата 12.6.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



andrew_121, ты не мог бы объяснить как это работает 
А в классе Cassete какие операции надо реализовать?

PM MAIL   Вверх
andrew_121
Дата 13.6.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Код


#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>

typedef std::string word;
/***************************************************************************/

class Record {
    /* Массив слов */
    std::vector<std::string> words;
public:
    /* Конструкторы */
    Record():words() {}
    Record(const std::string& b):words() { load(b); }
    /* Деструктор */
    ~Record() {}
    /* Загружает слова из строки */
    void load(const std::string& b) {
        std::istringstream buf(b);
        word word;

        while ( buf.rdbuf()->in_avail() ) {
            buf >> word;
            words.push_back(word);
        }
    }
    /* Сохраняет слова в строку */
    void save(std::string& b) {
        std::ostringstream buf;
        std::vector<std::string>::iterator it = words.begin();
        while ( it != words.end() ) {
            buf << *it << (it == words.end()) ? "" : " ";
            ++it;
        }
        b = buf.str();
    }
    /* Добавляет одно слово */
    void add(const word& w) {
        if ( w.empty() ) return;
        words.push_back(w);
    }
    /* Проверка на присутствие слова 'w' в массиве */
    bool contains(const word& w) const {
        return std::count(words.begin(), words.end(), w) > 0;
    }
};

/***************************************************************************/
/* Информация о записи */
struct RecordInfo {
    RecordInfo():cassete_num(0),record_num(0){}
    int cassete_num;
    int record_num;
};

/***************************************************************************/
/* Из строки прочитанной из файла записей, извлекает информацию о записи */
RecordInfo get_record_info( const std::string& s ) {
    RecordInfo recinfo;
    std::string casnum;
    std::string recnum;
    
    std::string::const_iterator it1 = std::find(s.begin(), s.end(), ':');
    casnum.resize(it1-s.begin());
    std::copy(s.begin(), it1, casnum.begin());
    
    it1++;
    std::string::const_iterator it2 = std::find(it1, s.end(), ':');
    recnum.resize(it2-it1);
    std::copy(it1, it2, recnum.begin());
    
    recinfo.cassete_num = atoi(casnum.c_str());
    recinfo.record_num = atoi(recnum.c_str());
    
    return recinfo;
}

/***************************************************************************/
/* Удаляет из строки информацию о записи */
std::string trim_info(const std::string& s) {
    std::string result;
    std::string::const_iterator it1 = std::find(s.begin(), s.end(), ':')+1;
    std::string::const_iterator it2 = std::find(it1, s.end(), ':')+1;
    result.resize(s.end()-it2);
    std::copy(it2, s.end(), result.begin());
    return result;
}

/***************************************************************************/

int main(int argc, char** argv) {
    RecordInfo recinfo;
    /* Открываем файл записей для чтения из него */
    std::fstream in("records.txt", std::ios::in);
    if ( !in ) {
        std::cout << "Can`t open records file. Terminate!\n";
        return 1;
    }
    /* Читаем построчно поку не конец файла */
    while ( !in.eof() ) {
        /* Временные объекты. (пока что...) */
        Record rec;
        std::string str;
        /* Читаем строку */
        std::getline(in, str);
        /* Извлекаем из нее информацию о записи */
        recinfo = get_record_info(str);
        /* Выводим информацию о записи. (для отладки...) */
        std::cout<< "Record info - cas:" << recinfo.cassete_num
                    << " rec:" << recinfo.record_num << std::endl;
        /* Удаляем из строки информацию о записи */
        str = trim_info(str);
        /* Загружаем запись в объект 'Record' */
        rec.load(str);
    }

    return 0;
}

/***************************************************************************/


Добавлено @ 11:05
Функции:
Код

RecordInfo get_record_info( const std::string& s );
std::string trim_info(const std::string& s);

Должны стать методами класса Magnitofon.

Это сообщение отредактировал(а) andrew_121 - 13.6.2009, 12:02


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
elenSV
  Дата 13.6.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



andrew_121, что то вроде этого не подойдёт:
Код

class Cassete
{
 private:
  int id;
  std::vector<Record> Records;
  std::vector<Record>::iterator pos;

 public:
  Cassete(int k) : id(k)
   { pos = Records.begin(); }
  void rew_begin(void)
   { pos = Records.begin(); }
  void add(const Record newrec)
   { Records.push_back(newrec); }
  int getId(void) { return id; }

};

 smile  smile 
PM MAIL   Вверх
elenSV
  Дата 13.6.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



вот так вот нельзя?:
magnitofon.h
Код

#ifndef MAGNITOFON_H
#define MAGNITOFON_H
class magnitofon
{
private:
   bool play, stop, rec, kasset, kaseta;        // Процессы: воспроизведение, запись и наличие кассеты
   int rew;                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
   public:
   magnitofon();              // Конструктор   
   ~magnitofon(); //деконструктор  
   void m_stop();       // Метод останавливает все процессы видеомагнитофона
   void m_play();       // Метод включает воспроизведение кассеты
   void m_rew(int interval);  // Метод перематывает кассету в заданном направление
   void m_rec();        // Метод начинает запись
   void insert();              // Метод вставляет кассету
   void get();               // Метод достаёт кассету      
   bool check();            // Метод проверяет, есть ли кассета
};
#endif //  MAGNITOFON_H_INCLUDED
#ifndef HAND_H_INCLUDED
#define HAND_H_INCLUŜDED
//#include "magnitofon.h"
class handmagnitofon:public magnitofon{
    public:
    handmagnitofon();
  void m_stop();       // Метод останавливает все процессы видеомагнитофона
   void m_play();       // Метод включает воспроизведение кассеты
   void m_rew(int interval);  // Метод перематывает кассету в заданном направление
   void m_rec();        // Метод начинает запись
   void insert();              // Метод вставляет кассету
   void get();               // Метод достаёт кассету      
   bool check();            // Метод проверяет, есть ли кассета
~handmagnitofon();
};

magnitofon.cpp
Код

#include <iostream>
#include "magnitofon.h"
using namespace std;

magnitofon::magnitofon()           // Конструктор
 {
    play = false;
    stop = false;       // По-умолчанию все процессы выключены
    rec = false;
    rew = 0;
    kasset = false;    // По-умолчванию кассеты нет
 }
magnitofon::~magnitofon()           // деконструктор
{
} 
 void m_stop()                                   // Метод останавливает все процессы видеомагнитофона
        {
                play = false;
                rec = false;
                rew = 0;
                        }
 
        void m_play()                                   // Метод включает воспроизведение кассеты
        {
                m_stop();                                       // Может быть активен только один процесс, поэтому вызывается метод "Stop"
                play = true;
                        }
 
        void m_rew(int interval)                // Метод перематывает кассету в заданном направление
        {
                m_stop();
                rew = interval;                         // Перемотка на заданный интервал
                       }
 
        void m_rec()                                    // Метод начинает запись
        {
                if (play) rec = true;           // Запись возможна только при включённом процессе play
               
        }
 
        void insert()                                   // Метод вставляет кассету
        {
                m_stop();
                kasset = true;
                
        }
 
        void eject()                                              // Метод достаёт кассету      
        {
                m_stop();
                kasset = false;
             
        }
 
        bool check()                                    // Метод проверяет, есть ли кассета
        {
                return kasset;                          // Возвращает true, если кассета есть, в противном случае false.
        }
 
       
//#include "hand.h"
#include <iostream>
handmagnitofon::handmagnitofon():magnitofon()
{}
 vector<string>  ListDat;                // Запоминает все действия
handmagnitofon::handmagnitofon(m_play)::magnitofon(m_play)
 {ListDat.push_back("m_play");}
handmagnitofon::handmagnitofon(m_stop)::magnitofon(m_stop)
{ListDat.push_back("m_stop");}
handmagnitofon::handmagnitofon(m_rec)::magnitofon(m_rec)
{ListDat.push_back("m_rec");}
handmagnitofon::handmagnitofon(m_rew)::magnitofon(m_rew)
{ListDat.push_back("m_rew");}
handmagnitofon::handmagnitofon(insert)::magnitofon(insert)
{ListDat.push_back("insert");}

 void outListDat()
        {
                vector<string>::iterator it;
                for(it = ListDat.begin(); it != ListDat.end(); ++it)
                        cout<<*it<<endl;
        }
};

PM MAIL   Вверх
andrew_121
Дата 13.6.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Во первых. Нет виртуальных функций. Значит это не полиморфизм.
Во вторых. Нет двух объектов унаследованных от базового. Значит проверить полиморфизм не получится.

Это сообщение отредактировал(а) andrew_121 - 13.6.2009, 20:53


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
elenSV
Дата 13.6.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



h файл будет так?
Код

#ifndef MAGNITOFON_H
#define MAGNITOFON_H
class magnitofon
{
private:
   bool play, stop, rec, kasset, kaseta;        // Процессы: воспроизведение, запись и наличие кассеты
   int rew;                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
   public:
   magnitofon();              // Конструктор   
   ~magnitofon(); //деконструктор  
   void m_stop();       // Метод останавливает все процессы видеомагнитофона
   void m_play();       // Метод включает воспроизведение кассеты
   void m_rew(int interval);  // Метод перематывает кассету в заданном направление
   void m_rec();        // Метод начинает запись
   void insert();              // Метод вставляет кассету
   void get();               // Метод достаёт кассету      
   bool check();            // Метод проверяет, есть ли кассета
};
#endif //  MAGNITOFON_H_INCLUDED
#ifndef HAND_H_INCLUDED
#define HAND_H_INCLUŜDED
//#include "magnitofon.h"
class handmagnitofon:public magnitofon{
    public:
    handmagnitofon();
 virtual void m_stop();       // Метод останавливает все процессы видеомагнитофона
  virtual void m_play();       // Метод включает воспроизведение кассеты
  virtual void m_rew(int interval);  // Метод перематывает кассету в заданном направление
  virtual void m_rec();        // Метод начинает запись
  virtual void insert();              // Метод вставляет кассету
   virtual void get();               // Метод достаёт кассету      
   virtual bool check();            // Метод проверяет, есть ли кассета
virtual~handmagnitofon();
};

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.