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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2009, 20:55   #11
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
вот скажем объявляю все методы в magnitofon виртульными
Это как вы так? У вас же handmagnitofon наследуется от magnitofon.
Да и вообще не понимаю, зачем он вам нужен..

Можно сделать так:
в Магнитофоне будет некоторый указатель на кассету. И в методах магнитофона нужно добавить запись действия в эту кассету (если она вставлена и включена запись).
Когда вставляем кассету (которую нужно создать) - присваиваем этому указателю адрес кассеты.
Когда вынимаем - указатель = NULL.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

нет здесь просто обязательно организовать иерархию и полиморфизм
handmagnitofon - главный класс
как реализовать запись?
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();
 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();
};
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 22:30   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
handmagnitofon - главный класс
А по коду получается, что главный - magnitofon.

Цитата:
нет здесь просто обязательно организовать иерархию и полиморфизм
Просто я не вижу логического обоснования и целесообразности существования класса handmagnitofon.

Хорошо. Предположим он главный. Но зачем он нужен? Что он делает?
Можете, например, в его методах вызывать методы magnitofon'а и добавлять строку в вектор.

Что такое магнитофон - это понятно. А вот что такое handmagnitofon - мне лично нет.
Соответственно, мне сложно сказать, как реализовать запись с его помощью.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Цитата:
Сообщение от Sazary Посмотреть сообщение
Хорошо. Предположим он главный. Но зачем он нужен? Что он делает?
Можете, например, в его методах вызывать методы magnitofon'а и добавлять строку в вектор.
А у меня разве не так?
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 23:08   #15
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

elenSV, почему у вас виртуальные методы в классе-наследнике?

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 23:14   #16
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

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

Код:
#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Record{
public:
	typedef string word;
	vector<word> words;
//................
};


class IMedia{
public:
	virtual ~IMedia() {} //destructor
	virtual void rew_begin() = 0;
	virtual void add_record(const Record&) = 0;
//................
protected:
	vector<Record> records;
};

//Магнитофон
class IRecorder{
public:
	virtual ~IRecorder() {}
	virtual void play() = 0;
	virtual void stop() = 0;
	//..........................
protected:
	IMedia *media;
};



//*****************************************************************************
class vhs_caset: public IMedia{
public:
	vhs_caset() {
		//.............
	}
	~vhs_caset(){
		//.............
	}

	 void rew_begin(){
		//.............
	}
	 void add_record(const Record& rhs){
		//.............
	}
//................

};

class dvd_caset: public IMedia{
public:
	dvd_caset() {
		//.............
	}
	~dvd_caset(){
		//.............
	}

	void rew_begin(){
		//.............
	}
	void add_record(const Record& rhs){
		//.............
	}
//................

};

class vhs_recorder: public IRecorder{
public:
	vhs_recorder() {
		media = new vhs_caset;
	}
	~vhs_recorder() {
		delete media;
	}
	void play(){
		cout << "vhs\n";
	}
	void stop(){
		//.........
	}
//................
};

class dvd_recorder: public IRecorder{
public:
	dvd_recorder() {
		media = new dvd_caset;
	}
	~dvd_recorder() {
		delete media;
	}
	void play(){
		cout << "dvd\n";
	}
	void stop(){
		//.........
	}
//................
};
//*****************************************************************************

int main() 
{
	dvd_recorder dvd;
	vhs_recorder vhs;
	IRecorder *recorder;

	recorder = &dvd;
	recorder->play();

	recorder = &vhs;
	recorder->play();

	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 13.06.2009, 23:15   #17
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
По умолчанию

ну да виртуальные методы должны быть в базовом
надо рассмотреть модификацию магнитофона, который запоминает у себя в памяти все выполняемые пользователем действия.
Код:
//#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;
        }
};
- а вообще что неправильно в такой записи
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 23:27   #18
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
Радость

Цитата:
Сообщение от ISergeyN Посмотреть сообщение
Я предложил бы примерно такую архитектуру
то есть здесь два типа носителей dvd и VHS, а
class IMedia и class IRecorder для чего нужны?
[/CODE]
elenSV вне форума Ответить с цитированием
Старый 13.06.2009, 23:32   #19
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
class IMedia и class IRecorder для чего нужны?
Цитата:
обязательно организовать иерархию и полиморфизм
Ваши слова?.

Это прочитать и выучить:
Polymorphism
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 13.06.2009, 23:37   #20
elenSV
Пользователь
 
Регистрация: 25.04.2009
Сообщений: 35
Смущение

Цитата:
Сообщение от ISergeyN Посмотреть сообщение
Ваши слова?.
-согласен, большое спасибо
Цитата:
Сообщение от ISergeyN Посмотреть сообщение
Это прочитать и выучить:
-хотелось бы что-нибудь на русском
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