Форум программистов, компьютерный форум CyberForum.ru

Создание класса "Фильм" - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 19:14     Создание класса "Фильм" #1
Помогите, пожалуйста!!!

Нужно сделать следующее:

1.Построить класс
Фильм (со свойствами):
название фильма,
длительность (кол-во мин),
жанр.
Реализовать следующие методы класса:
вернуть жанр фильма,
вернуть длительность фильма,
показать всю информацию о фильме.

Построить двух наследников данного класса.
2.Художественный фильм (со своим атрибутом):
Фамилия режиссёра фильма
методами:
вернуть фамилию режиссера,
показать всю информацию о художественном фильме (произвести замещение данного метода с учетом нового атрибута).
В классе Художественный фильм создать специальный закрытый атрибут (и метод печатающий значение данного атрибута), значение которого отражает количество объектов класса Художественный фильм функционирующих в программе.


3.Класс
Документальный фильм (со своим атрибутом):
возрастная категория.
Выполнить замещение метода печатающие все свойства фильма, с учетом нового атрибута.

Вроде построил класс (для 1 "фильмы"), но не могу понять как действует конструктор и деструктор
и методы класа тоже понял расплывчато.

Помогите хотябы с одним классом, чтобы я понял как это все работае.

p.s. Зарание спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2012, 19:14     Создание класса "Фильм"
Посмотрите здесь:

создание класса C++
C++ создание класса
Создание класса C++
создание класса C++
Создание класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 19:34     Создание класса "Фильм" #2
Вот первое задание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream.h>
#include <conio.h>
 
class movie
{
   public:
 
   movie(const char * = 0, int = 0, const char * = 0);
 
   const char * getName()
   {
      return name;
   }
 
   int getLength()
   {
      return length;
   }
 
   const char * getJanr ()
   {
      return janr;
   }
 
   void setJanr(const char *);
   void setLength(int);
   void setName(const char *);
 
   void print()
   {
      cout << "Name = " << name << endl;
      cout << "Janr = " << janr << endl;
      cout << "Length = " << length << endl;
   }
 
   private:
 
   char name[30];
   char janr[30];
   int length;
}
 
movie::movie (const char * _name, int _l, const char * _janr)
{
   setJanr(_janr);
   setName(_name);
   setLength(_l);
}
 
void movie::setLength(int x) {length = x;}
main ()
{
   movie m("Titanik", 2000, "Drama");
 
   getch();
 
   return 0;
}
Правда не описал пока функции setName, SetJanre. Но тут знания классов особо не надо, делаете как и функцию setLength. Но всё же думаю, для понимания вам следует почитать литературу.
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 19:40  [ТС]     Создание класса "Фильм" #3
Спасибо, сейчас по разбираюсь.

Литературу читал: Учусь по книге "С++ для чайников". Может посоветуете что-нибудь, буду рад!
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 19:42     Создание класса "Фильм" #4
Вот дописал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
class movie
{
   public:
 
   movie(const char * = 0, int = 0, const char * = 0);
 
   const char * getName()
   {
      return name;
   }
 
   int getLength()
   {
      return length;
   }
 
   const char * getJanr ()
   {
      return janr;
   }
 
   void setJanr(const char *);
   void setLength(int x) {length = x;}
   void setName(const char *);
 
   void print()
   {
      cout << "Name = " << this->getName() << endl;
      cout << "Janr = " << this->getJanr() << endl;
      cout << "Length = " << this->getLength() << endl;
   }
 
   private:
 
   char name[30];
   char janr[30];
   int length;
}
 
movie::movie (const char * _name, int _l, const char * _janr)
{
   setJanr(_janr);
   setName(_name);
   setLength(_l);
}
 
void movie::setJanr(const char *j)
{
   for (int i = 0; i <= strlen(j); i++)
      janr[i] = j[i];
}
 
void movie::setName (const char * n)
{
   for (int i = 0; i <= strlen(n); i++)
      name[i] = n[i];
}
 
main ()
{
   movie m("Titanik", 2000, "Drama");
 
   m.print();
 
   getch();
 
   return 0;
}
Сам учил по Дейтелам
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 19:57  [ТС]     Создание класса "Фильм" #5
попробовал откампилить на dev cpp. ругается на

C++
1
2
movie::movie (const char * _name, int _l, const char * _janr)
{
говорит, что новый тип не может быть определен в типе выхода
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 20:05     Создание класса "Фильм" #6
попробуйте
C++
1
void movie::movie (const char * _name, int _l, const char * _janr)
А на остальные функции не ругаецца? Просто я на борланде пишу.

Цитата Сообщение от Gambit_d.s Посмотреть сообщение
говорит, что новый тип не может быть определен в типе выхода
Не встречал
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 20:12  [ТС]     Создание класса "Фильм" #7
пишет следуюшее:

new types may not be defined in a return type
return type specification for constructor invalid


с void:

new types may not be defined in a return type
two or more date types in declaration of `movie'
return type specification for constructor invalid

на остольное не реагирует
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 20:16     Создание класса "Фильм" #8
Так, попробуйте в описании класса, после метки public: написать void, вот так:
C++
1
void movie(const char * = 0, int = 0, const char * = 0);
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.01.2012, 20:18     Создание класса "Фильм" #9
После объявления класса должна быть точка с запятой
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 20:19     Создание класса "Фильм" #10
Цитата Сообщение от soon Посмотреть сообщение
После класса должна быть точка с запятой
Точноманамана!
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 20:28  [ТС]     Создание класса "Фильм" #11
Все верно с " ; " все роботае!
Огромное спасибо!!!

Теперь объясните дураку где здесь конструктор,а где деструктор?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 20:29     Создание класса "Фильм" #12
Конструктор вот:
C++
1
movie(const char * = 0, int = 0, const char * = 0);
Деструктор здесь не требуется, но всё таки создаётся автоматически, пустым.
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 20:46  [ТС]     Создание класса "Фильм" #13
А методы?
я так понимаю. что метод тут только один?
"Вся информация о фильме"

Добавлено через 4 минуты
Методы уже дабавил ...
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 20:48     Создание класса "Фильм" #14
Нет, setName, getName, setJanr, getJanr, print, setLength, getLength и т. д. - это всё методы

Добавлено через 53 секунды
Цитата Сообщение от Gambit_d.s Посмотреть сообщение
Методы уже дабавил ...
Куда? Я же вроде норм написал всё?
Gambit_d.s
0 / 0 / 0
Регистрация: 07.01.2012
Сообщений: 9
07.01.2012, 21:00  [ТС]     Создание класса "Фильм" #15
Кажется понял
Сейчас все верну назад

Добавлено через 4 минуты
Не хочу показаться наглым, но
можно хотябы синтаксис, как сделать наследника класса
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 21:05     Создание класса "Фильм" #16
Так:
C++
1
2
3
4
class Supervisor: public movie
{
    Supervisor (const char *name...blablabla): movie(name..blablabla) //Короче это пример вызова конструктора movie из класса дочернего Supervisor
};
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.01.2012, 21:21     Создание класса "Фильм" #17
На всякий случай
Чтобы наследники могли "видеть" закрытые элементы родителя, их(элементы) нужно поместить в секцию protected
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
07.01.2012, 21:39     Создание класса "Фильм" #18
Цитата Сообщение от soon Посмотреть сообщение
Чтобы наследники могли "видеть" закрытые элементы родителя
А зачем им их видеть? Базовый класс оборудован для их управления всем чем нужно(особенно если сделать парочку проверок). Зачем забивать голову этим для незачем?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
07.01.2012, 21:55     Создание класса "Фильм" #19
Цитата Сообщение от dimcoder Посмотреть сообщение
А зачем им их видеть?
А зачем тогда наследовать? С тем же успехом можно создать в новом классе экземпляр "базового" и через него работать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2012, 10:07     Создание класса "Фильм"
Еще ссылки по теме:

создание класса C++
C++ Создание указателя типа базового класса на экземпляр производного класса
C++ Создание класса в MV

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
08.01.2012, 10:07     Создание класса "Фильм" #20
Цитата Сообщение от soon Посмотреть сообщение
А зачем тогда наследовать?
Что значит зачем наследовать? Хотите сказать, что если будете использовать protected-наследование, будет лучше? Это нарушение инкапсуляции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream.h>
#include <conio.h>
#include <string.h>
 
class movie
{
   public:
 
   movie(const char * = 0, int = 0, const char * = 0);
 
   const char * getName()
   {
      return name;
   }
 
   int getLength()
   {
      return length;
   }
 
   const char * getJanr ()
   {
      return janr;
   }
 
   void setJanr(const char *);
   void setLength(int x) {length = (x > 0) ? x : 0;}
   void setName(const char *);
 
   void print()
   {
      cout << "Name = " << this->getName() << endl;
      cout << "Janre = " << this->getJanr() << endl;
      cout << "Length = " << this->getLength() << endl;
   }
 
   private:
 
   char name[30];
   char janr[30];
   int length;
};
 
movie::movie (const char * _name, int _l, const char * _janr)
{
   setJanr(_janr);
   setName(_name);
   setLength(_l);
}
 
void movie::setJanr(const char *j)
{
   for (int i = 0; i <= strlen(j); i++)
      janr[i] = j[i];
}
 
void movie::setName (const char * n)
{
   for (int i = 0; i <= strlen(n); i++)
      name[i] = n[i];
}
 
 
class ArtFilm: public movie
{
   public:
 
   ArtFilm(const char * _name, int _l, const char * _janr, const char * _supName):
      movie(_name, _l, _janr)
   {
      setSupName(_supName);
   }
 
   void setSupName(const char *);
 
   const char * getSupName() {return supName;}
 
   void print()
   {
      movie::print();
      cout << "Supervisor name is " << getSupName() << endl;
   }
 
   private:
 
   char supName[30];
};
 
 
void ArtFilm::setSupName(const char * _supName)
{
   for (int i = 0; i <= strlen(_supName); i++)
      supName[i] = _supName[i];
}
 
main ()
{
   clrscr();
 
   movie m("Titanik", 300, "Drama");
   ArtFilm n("2012", 180, "Action", "James Cameron");
 
   m.print();
 
   cout << endl;
 
   n.setName("20012");   //Пример доступа к закрытым элементам базового класса
 
   n.print();
 
   getch();
 
   return 0;
}
Цитата Сообщение от soon Посмотреть сообщение
С тем же успехом можно создать в новом классе экземпляр "базового" и через него работать.
Я весь внимания.
Yandex
Объявления
08.01.2012, 10:07     Создание класса "Фильм"
Ответ Создать тему
Опции темы

Текущее время: 11:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru