Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 14:20   #1
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
По умолчанию контроллер

класс для представления понятия "контроллер видеомагнитофона"(обеспечивает програмное управление видеомагнитофоном, который может осуществлять запись,вставить, извлечь кассету и проверить наличие кассеты, выполнять воспроизведение кассеты и осуществлть перемотку в указанном направлении
как здесь объявить копирующий конструктор, перегруженный оператор присваивания, inline и const в объявлениях методов и операторов
и манипулятор ввода и вывода в виде дружественных функций
magnitofon.h
Код:
#ifndef MAGNITOFON_H
#define MAGNITOFON_H
#include <iostream>
#include <string>
#include <vector>
#include <clocale>
using namespace std;
class magnitofon
{
 private: 
   magnitofon();           // Конструктор    
   ~magnitofon(); //деконструктор 
   bool play, stop, rec, kasset, kaseta;        // Процессы: воспроизведение, запись и наличие кассеты
   int rew;                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
public:
   magnitofon();           // Конструктор    
   void m_stop();       // Метод останавливает все процессы видеомагнитофона
   void m_play();       // Метод включает воспроизведение кассеты
   void m_rew(int interval);  // Метод перематывает кассету в заданном направление
   void m_rec();        // Метод начинает запись
   void insert();              // Метод вставляет кассету
   void get();               // Метод достаёт кассету      
   bool check();            // Метод проверяет, есть ли кассета
};
#endif // MAGNITOFON_H
magnitofon.cpp
Код:
magnitofon::magnitofon()           // Конструктор
 {
    play = false;
    stop = false;       // По-умолчанию все процессы выключены
    rec = false;
    rew = 0;
    kasset = false;    // По-умолчванию кассеты нет
   }
magnitofon::~magnitofon()           // деконструктор
{
} 
 void magnitofon::m_stop()       // Метод останавливает все процессы видеомагнитофона
 {
    play = false;
    rec = false;
    rew = 0;
    }

 void magnitofon::m_play()       // Метод включает воспроизведение кассеты
 {
    m_stop();        // Может быть активен только один процесс, поэтому вызывается метод "Stop"
    play = true;
       }

 void magnitofon::m_rew(int interval)  // Метод перематывает кассету в заданном направление
 {
    m_stop();
    rew = interval;          // Перемотка на заданный интервал
   }

 void magnitofon::m_rec()        // Метод начинает запись
 {
    if (play) rec = true;  // Запись возможна только при включённом процессе play
     }

 void magnitofon::insert(int id)              // Метод вставляет кассету
{
    m_stop();
    kasset = true;
   }

 void magnitofon::get()                // Метод достаёт кассету      
{
    m_stop();
    kaseta = false;
    }

 bool magnitofon::check()            // Метод проверяет, есть ли кассета
 {
    return kasset;      // Возвращает true, если кассета есть, в противном случае false.
 }

};
main.cpp
Код:
#include "magnitofon.h"

int main()
{
magnitofon m;
int x;
cout<<"----------Menu----------"<<endl;
cout<<"0. воспроизведение"<<endl;
cout<<"1. вставить кассету"<<endl;
cout<<"2.  извлечь кассету'"<<endl;
cout<<"3. проверить наличие кассеты"<<endl;
cout<<"4. запись"<<endl;
cout<<"5. перемотать на указанный интервал"<<endl;
cout<<"6. стоп"<<endl;
while (true)
{
   cin>>x;
   switch(x)
   { 
      case 0:
         m.play();
         break;
      case 1:
         m.insert();
         break; 
      case 2:
         m.get();
         break;
      case 3:
         if (m.check)
         { cout<<"Кассета есть"<<endl; }
         else
         { cout<<"Кассеты нет"<<endl; }
         break;
      case 4:
         m.m_rec();
         break;
      case 5:
         cout<<"Интервал: ";
         cin>>x;
         m.m_rew(x);
         break;
      case 6:
         m.stop();
         break;
   }
никак не получается это сделать
выходит только что-то вроде этого:
magnitofon.h
Код:
..............................
magnitofon();
    magnitofon(unsigned a,unsigned b);
    magnitofon(const controller&original);
   friend std::istream & operator >> (std::istream&is,magnitofon & count);
    friend std::ostream& operator<<(std::ostream& os,const magnitofon & count);
    bool   ??
    inline ??
};


inline unsigned magnitofon::full()const{
    ???
}
magnitofon.cpp
Код:
magnitofon::magnitofon(const magnitofon& orig):??
{}
elenSV вне форума Ответить с цитированием
Старый 12.06.2009, 19:56   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Конструктор и деструктор (а не деконструктор) должны быть в public.

Вот тут:
Код:
  case 0:
         m.play();
         break;
у вас нет функции play(), есть m_play()

Код:
 m.insert();
вызывается без параметра, хотя в описании он есть:
Код:
 void magnitofon::insert(int id)              // Метод вставляет кассету
{
    m_stop();
    kasset = true;
   }


Цитата:
case 3:
if (m.check)
{ cout<<"Кассета есть"<<endl; }
Скобки забыли. Все-таки, check() - метод.
------------------------------

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

----------------------
Конструктор копирования:
Код:
magnitofon(const magnitofon& A);
Присваивание:
Код:
magnitofon operator=(const magnitofon& A);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 10:26   #3
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
Смущение

да спасибо с этим я вроде разобралась
а вот этот никак не получается
иерархия классов и динамический полиморфизм
разработать програмную модель для заданной преподователем иерархии понятий
в программе должны быть задействованы все разработанные классы и продеманстрировано использование динамического полиморфизма

Рассмотреть модификацию магнитофона, который запоминает у себя в памяти все выполняемые пользователем действия. Считается что видиокассета обладает уникальным числовым идентификатором. В качестве тестовой программы рассмотреть задачу выполнения просмотра кассеты на магнитофоне, точный вид которого не определен. Просмотр сосстоит в последовательности след. операций: вставить кассету, перемотать кассету в начало, включить воспроизведение, выполнить останов и извлечь кассету.

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

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

/***************************************************************************/
class Magnitofon {
/* Ну и сам Магнитофон, который все перечисленым выше, управляет.
*/
};
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 13:31   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Не очень понял, что именно не получается ) То есть, в чем, собственно, вопрос? )
Глядя на код, вижу, что у вас название типа и переменной совпадают (words).

И еще: есть ли какая-то связь между этим листингом и самым первым?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 14:28   #5
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
По умолчанию

Код:
#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;
}

/***************************************************************************/
не получается оформить Cassete
хотя бы примерно
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 14:42   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Может, что-нибудь такое..
Код:
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; }

};
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 19:31   #7
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
Печаль

вот так вот нельзя?:
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;
        }
};

Последний раз редактировалось Sazary; 13.06.2009 в 19:40.
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 19:49   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
вот так вот нельзя?
Мм.. А почему нет?
Только ошибки нужно исправить (пара методов не объявлены, а в magnitofon.cpp методы вообще не принадлежат классу).

Только не понял вот этот кусок:
Код:
//#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;
        }
};
Что это?

И вообще, кто такой handmagnitofon?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 20:13   #9
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
Смех

magnitofon - это главный класс
в hand надо записать все действия, что я и пытаюсь сделать
А как исправить?
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 20:44   #10
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
По умолчанию

вот скажем объявляю все методы в magnitofon виртульными
Код:
#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();
};
в cpp вот так будет?:
Код:
void magnitofon::m_stop()       // Метод останавливает все процессы видеомагнитофона
{
	stop = true;
	play = false;
	rec = false;
	rew = 0;
}

void magnitofon::m_play()       // Метод включает воспроизведение кассеты
{
	m_stop();        // Может быть активен только один процесс, поэтому вызывается метод "Stop"
	stop=false;
	play = true;
}

void magnitofon::m_rew(int interval)  // Метод перематывает кассету в заданном направление
{
	m_stop();
	stop=false;
	rew = interval;          // Перемотка на заданный интервал
}

void magnitofon::m_rec()        // Метод начинает запись
{
	if (play) rec = true;  // Запись возможна только при включённом процессе play
}

void magnitofon::insert()              // Метод вставляет кассету
{
	m_stop();
	kasset = true;
}

void magnitofon::get()                // Метод достаёт кассету      
{
	m_stop();
	kasset = false;
а вот что делать с записывающим классом
в этом куске я пыталась вызвать метод и записать действие в лист, а как это правильно сделать?
elenSV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
контроллер видеомагнитофона elenSV Помощь студентам 0 03.05.2009 13:00
Контроллер прерываний smileman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 16.11.2008 14:23
Контроллер Simply-Art Компьютерное железо 0 24.05.2008 05:07
Для кадого ли устройства есть свой контроллер? Elm0 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 21.06.2007 20:42