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

Поиск:

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


depict1
****


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

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



Цитата(azesmcar @  11.6.2009,  14:47 Найти цитируемый пост)
А ведь и вправду похоже на спам бот.

ну, я ж говорил  smile 


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


Шустрый
*


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

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



это задача контроллер контейнера с таким же заданием
inline unsigned full()const; - как я поняла здесь больше ничего не надо?
но надо записать копирующий конструктор- я не понимаю, что значит " вам его писать НЕ НАДО." - если препод мне говорит, что бы я обязательно записала его
вон они, написаны - а для моего случая эт как?
а здесь http://forum.vingrad.ru/forum/topic-262056...y1887548/0.html я ничего не нашла
ну сколько можно надо мной издеваться?!

Это сообщение отредактировал(а) elenSV - 11.6.2009, 15:12
PM MAIL   Вверх
azesmcar
Дата 11.6.2009, 15:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(elenSV @  11.6.2009,  15:09 Найти цитируемый пост)
это задача контроллер контейнера с таким же заданием
inline unsigned full()const; - как я поняла здесь больше ничего не надо?

Для чего? Смотря чего надо достичь.

Цитата(elenSV @  11.6.2009,  15:09 Найти цитируемый пост)
но надо записать копирующий конструктор- я не понимаю, что значит " вам его писать НЕ НАДО." - если препод мне говорит, что бы я обязательно записала его

Это значит что компилятор напишет его за вас. Если препод требует, я привел вам код оператора присваивания и копирующего конструктора. 
Цитата(elenSV @  11.6.2009,  15:09 Найти цитируемый пост)
а здесь http://forum.vingrad.ru/forum/topic-262056...y1887548/0.html я ничего не нашла

Я тоже там ничего не нашел. Но если это о моей ссылке, я присылал другую. Ее не надо копировать, просто нажать на нее.
или вотСЮДА

Цитата(elenSV @  11.6.2009,  15:09 Найти цитируемый пост)
ну сколько можно надо мной издеваться?!

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

Это сообщение отредактировал(а) azesmcar - 11.6.2009, 15:22
PM   Вверх
elenSV
  Дата 11.6.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



копирующий конструктор :
в h
magnitofon(const magnitofon&orig);
в cpp 
magnitofon::magnitofon(const magnitofon& orig):m_stop(orig.m_stop),m_play(orig.m_play),m_rew(orig.m_rew),m_rec(orig.m_rec),
insert(orig.insert),get(orig.get),check(orig.check)
{}
должно получиться что то вроде этого?
манипулятор ввода и вывода в виде дружественных функций
в h
 friend std::istream & operator >> (std::istream&is,magnitofon & count);
 friend std::ostream& operator<<(std::ostream& os,const magnitofon & count);
в cpp - ничего не надо?
а что делать с перегруженным  оператором присваивания ?
 smile 
PM MAIL   Вверх
azesmcar
Дата 11.6.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(elenSV @  11.6.2009,  16:00 Найти цитируемый пост)
magnitofon::magnitofon(const magnitofon& orig):m_stop(orig.m_stop),m_play(orig.m_play),m_rew(orig.m_rew),m_rec(orig.m_rec),

насчет этого, инициализировать желательно в том порядке, в котором переменные были обявлены.
т.е.
play, stop, rec, rew

Цитата

insert(orig.insert),get(orig.get),check(orig.check)

это что? копирование функций?? smile такого не бывает. копируют только нестатические переменные члены.
т.е. примерно это, может что-то упустил, проверьте
Код

magnitofon::magnitofon(const magnitofon& orig):m_play(orig.m_play),m_stop(orig.m_stop),m_rec(orig.m_rec),m_rew(orig.m_rew)
{
}


Цитата(elenSV @  11.6.2009,  16:00 Найти цитируемый пост)
в cpp - ничего не надо?

надо, написать тело этих функций.
Код

std::istream & operator >> (std::istream&is,magnitofon & count)
{
}
std::ostream& operator<<(std::ostream& os,const magnitofon & count)
{
}


Цитата(elenSV @  11.6.2009,  16:00 Найти цитируемый пост)
а что делать с перегруженным  оператором присваивания ?

напиать так как я показал. 
Код

magnitofon& magnitofon::operator = (const magnitofon& orig)
{
   m_play = orig.m_play;
   m_stop = orig.m_stop;
   m_rec = orig.m_rec;
   m_rew = orig.m_rew;
   return *this;
}

PM   Вверх
elenSV
  Дата 11.6.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у меня получилось что то вроде этого
но чуствую многовато косяков - проверьте
magnitofon.h
Код

#ifndef MAGNITOFON_H
#define MAGNITOFON_H
#include <iostream>
#include <string>
#include <vector>
#include <clocale>
using namespace std;
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();            // Метод проверяет, есть ли кассета
   magnitofon(const magnitofon&orig);
   };
   friend std::istream & operator >> (std::istream&is,magnitofon & count);
   friend std::ostream& operator<<(std::ostream& os,const magnitofon & count);
   magnitofon& magnitofon::operator = (const magnitofon& orig)
{
   m_play = orig.m_play;
   m_stop = orig.m_stop;
   m_rec = orig.m_rec;
   m_rew = orig.m_rew;
   return *this;
}
inline unsigned full()const;
}
#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.
 }
magnitofon::magnitofon(const magnitofon& orig):m_play(orig.m_play),m_stop(orig.m_stop),m_rec(orig.m_rec),m_rew(orig.m_rew)
{
} //копирующий конструктор
std::istream & operator >> (std::istream&is,magnitofon & count)
{
}
std::ostream& operator<<(std::ostream& os,const magnitofon & count)
{ //манипулятор ввода и вывода в виде дружественных функций
}
};

А что делается в этой строчке   return *this;
и не очень понятно зачем используются inline и const
PM MAIL   Вверх
andrew_121
Дата 11.6.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
 ~magnitofon(); //деконструктор 

деструктор



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
magnitofon(const magnitofon&orig);

Перемести к конструкторам.



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
   magnitofon& magnitofon::operator = (const magnitofon& orig)
{
   m_play = orig.m_play;
   m_stop = orig.m_stop;
   m_rec = orig.m_rec;
   m_rew = orig.m_rew;
   return *this;
}

Перемести в .срр файл.



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
 void magnitofon::m_rew(int interval)  // Метод перематывает кассету в заданном направление

Что задает направление? Я вижу только интервал.



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
void magnitofon::insert(int id)              // Метод вставляет кассету

Для чего в агументе id ?



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
void magnitofon::get()                // Метод достаёт кассету

Я так понял, метод извлекает кассету? Тогда правильней назвать eject()



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
А что делается в этой строчке   return *this;

Возвращает присвоенный объект.



Цитата(elenSV @  11.6.2009,  19:00 Найти цитируемый пост)
и не очень понятно зачем используются inline и const 

А я не вижу реализацию. Только декларация.


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


Шустрый
*


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

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



а реализация как то так будет:
Код

inline void magnitofon::play(){
    return;
    }
  хотя я не оч понимаю зачем это

а перемотку в разные стороны можно осуществить так, что бы пользователь вводил отриц число(перемотка назад)?
 smile 
PM MAIL   Вверх
andrew_121
Дата 11.6.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(elenSV @  11.6.2009,  19:46 Найти цитируемый пост)
а реализация как то так будет:

 smile 
inline можешь убрать. Нет в нем смысла.
Цитата(elenSV @  11.6.2009,  19:46 Найти цитируемый пост)
а перемотку в разные стороны можно осуществить так, что бы пользователь вводил отриц число(перемотка назад)?

Да, конечно.


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


Шустрый
*


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

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



"inline можешь убрать. Нет в нем смысла."
я понимаю что inline уже устарел
но мне его надо написать для понимания - которого в принципе нет
он вообще зачем?
а записано верно?
а для rec, rew, stop примерно так же будет? 
 smile 
PM MAIL   Вверх
andrew_121
Дата 11.6.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(elenSV @  11.6.2009,  20:00 Найти цитируемый пост)
но мне его надо написать для понимания - которого в принципе нет

Для понимания чего? Смысла в нем, в твоем случае нет!



Цитата(elenSV @  11.6.2009,  20:00 Найти цитируемый пост)
он вообще зачем?

Просит компилятор сделать функцию встраиваемой, а не вызываемой.


Цитата(elenSV @  11.6.2009,  20:00 Найти цитируемый пост)
а записано верно?

Да.



Цитата(elenSV @  11.6.2009,  20:00 Найти цитируемый пост)
а для rec, rew, stop примерно так же будет? 

Ага.


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


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(elenSV @  11.6.2009,  20:00 Найти цитируемый пост)
я понимаю что inline уже устарел

 smile даа??? хм. Кто это сказал?

Цитата(elenSV @  11.6.2009,  20:00 Найти цитируемый пост)
но мне его надо написать для понимания - которого в принципе нет
он вообще зачем?
а записано верно?
а для rec, rew, stop примерно так же будет? 

Инлайн функция - другими словами встраиваемая отличается от обычной тем, что она не вызывается каждый раз, а ее код копируется в те места, где ее вызывали, как следствие - программа работает чуть быстрее (не теряет время на вызовы). 
PM   Вверх
elenSV
  Дата 12.6.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

вот допустим класс без последних (в принципе нужных изменений) - сохраняющий действия пользователя в список
как выполнить задание - вообще не понимаю
Код
#ifndef MAGNITOFON_H
#define MAGNITOFON_H
class magnitofon
{
private:
   bool play, stop, rec, kasset, kaseta;        // Процессы: воспроизведение, запись и наличие кассеты
   int rew;                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
       vector<string>  ListDat;                // Запоминает все действия                      // отрицательное число - назад на заданный интервал, 0 - бездействие)
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

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

main.cpp
Код
int main()
{
magnitofon m;
int x;
cout<<"----------Menu----------"<<endl;
cout<<"1. вставить кассету"<<endl;
cout<<"2.  извлечь кассету'"<<endl;
cout<<"3. проверить наличие кассеты"<<endl;
cout<<"4. запись"<<endl;
cout<<"5. перемотать на указанный интервал"<<endl;
cout<<"6. стоп"<<endl;
cout<<"7. воспроизведение"<<endl;
while (true)
{
   cin>>x;
   switch(x)
   {
      case 1:
         cout<<"Номер кассеты: ";
         cin>>x;
         m.insert(x);
         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;
   }
      case 7:
         m.play();
         break;
   }
 magnitofon mag;
        mag.insert();
        mag.m_play();
        mag.m_rec();
        mag.m_rew(1);
        mag.m_stop();
        mag.get();
 
        mag.outListDat();
 
        system("pause");
}
return 0;
}

только могу сразу сказать - ногами бить себя не позволю  smile 

Это сообщение отредактировал(а) elenSV - 12.6.2009, 07:51
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(elenSV @  12.6.2009,  07:50 Найти цитируемый пост)
иерархия классов и динамический полиморфизм

Ни первым,  ни вторым, тут и не пахнет.
 smile 


Цитата(elenSV @  12.6.2009,  07:50 Найти цитируемый пост)
только могу сразу сказать - ногами бить себя не позволю

Хорошо что предупредила smile 


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


Шустрый
*


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

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



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


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();
};

 smile 
PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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