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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
patricksmirnov
74 / 74 / 10
Регистрация: 28.02.2010
Сообщений: 159
#1

Создать абстрактный класс CVehicle - C++

29.03.2012, 21:25. Просмотров 1529. Ответов 4
Метки нет (Все метки)

Здравствуйте, товарищи!
Задали задачу, не понимаю условие.

Создать абстрактный класс CVehicle. На его основе реализовать классы CPlane,
ССаг и CShip. Классы должны иметь возможность задавать и получать коорди*
наты, параметры средств передвижения (цена, скорость, год выпуска). Для само*
лета должна быть определена высота, для самолета и корабля — количество пас*
сажиров. Для корабля — порт приписки.

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

Я не понял, какой список надо создать? Просто набор объектов или же это те списки,что двусвязные или односвязные?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 21:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать абстрактный класс CVehicle (C++):

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями - C++
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Создать класс - данные - абстрактный базовый класс. Создать производные классы - C++
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

Класс: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. - C++
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle...

Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle - C++
Создать абстрактный базовый класс Figure с виртуальной функцией -периметр.Создать производные классы Rectangle, Circle,Triangle,Rhomb в...

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы - C++
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы все фигуры, содержащие...

Создать абстрактный класс - C++
И вот ещё одно.... ))) Тоже очень надо на завтра..... Это всё одно задание..... =) пожалуйста... :-[ Создать абстрактный...

4
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
29.03.2012, 21:27 #2
список - std::list может быть? либо свою реализацию.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
29.03.2012, 22:00 #3
скорее всего классическое задание на наследование, полиморфизм и виртуальные функции.
Создать несколько классов разносортных объектов,
унаследовать их от общего родителя.
создать для них единый интерфейс из чисто виртуальных функций в абстрактном классе-родителе,
а потом продемонстрировать, как обращаясь к ним по указателю на CVehicle
так, чтобы вызывать у них эти виртуальные функции, а поведение будет у каждого своё.
Это ж полиморфизм называется!

Добавлено через 13 минут
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
class CVEhicle{
public:
 CVehicle(){//linking to list
   this->next=start;
   start=this;
  }
 int price, speed, year;
 virtual void move()=0;
 CVehicle* getnext(){return next;}
 static CVehicle* getstart(){return start;}
 private:
 static CVehicle* start;
 CVehicle * next;
};
CVehicle* CVehicle::start=NULL;
class CPlane: public CVehicle{
public:
CPlane();
int altitude;
void move(){cout<<"flying";}
};
class CShip: public CVehicle{
public:
CShip();
int passengers;
void move(){cout<<"sailing";}
};
int main(){
CVehicle::start=Createlist();
...
ptr1=new CShip();
ptr2=new CPlane();
ptr1=CVehicle::getstart();
while(ptr1){
ptr1->move();
ptr1=ptr1->getnext();
}
return 0;
}
Как то так. Лень было серьёзно разбираться.
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
30.03.2012, 15:27 #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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <iostream>
#include <list>
#include <memory>
#include <algorithm>
 
enum class Type
{
   Ship,
   Car,
   Plane
};
 
class CVehicle
{
public:
   struct Coords
   {
      Coords(int x_, int y_):x(x_), y(y_)
      {
      }
      Coords():Coords(0, 0)
      {
      }
      int x, y;
   };
  
   virtual ~CVehicle()
   {
   }
   
   const Coords& get_coords() const { return current_coords; }
   void set_coords(const Coords& c) { current_coords = c; }
   void set_coords(const int x, const int y) { set_coords(Coords(x, y)); }
   const double get_amount() const { return amount; }
   const size_t get_speed() const { return max_speed; }
   const size_t get_year() const { return year; }
   virtual Type get_type() const = 0;
protected:
   CVehicle(const Coords& coords, const double am, const size_t speed, const size_t y):
   current_coords(coords), amount(am), max_speed(speed), year(y)
   {
   }
   Coords current_coords;
   double amount;
   size_t max_speed;
   size_t year;
};
 
class IPassNumber
{
public:
   IPassNumber(const size_t pass_n):pass_no(pass_n)
   {
   }
   virtual ~IPassNumber()
   {
   }
   const size_t get_pass_no() const { return pass_no; }
private:
   size_t pass_no;
};
 
class CPlane : public CVehicle, public IPassNumber
{
public:
   CPlane
   (
      const Coords& coords, const double amount, const size_t speed, const size_t year,
      const size_t h, const size_t pass_no
   ):CVehicle(coords, amount, speed, year), IPassNumber(pass_no), height(h)
   {
   }
   CPlane
   (
      const double amount, const size_t speed, const size_t year,
      const size_t h, const size_t pass_no
   ):CPlane(Coords(), amount, speed, year, h, pass_no)
   {
   }
   virtual ~CPlane()
   {
   }
   const size_t get_height() const { return height; }
   virtual Type get_type() const { return Type::Plane; }
private:
   size_t height;
};
 
class CShip: public CVehicle, public IPassNumber
{
public:
   CShip
   (
      const Coords& coords, const double amount, const size_t speed, const size_t year,
      const size_t pass_no, const std::string& p
   ):CVehicle(coords, amount, speed, year), IPassNumber(pass_no), port(p)
   {
   }
   CShip
   (
      const double amount, const size_t speed, const size_t year,
      const size_t pass_no, const std::string& p
   ):CShip(Coords(), amount, speed, year, pass_no, p)
   {
   }
   virtual ~CShip()
   {
   }
   const std::string& get_port() const { return port; }
   virtual Type get_type() const { return Type::Ship; }
private:
   std::string port;
};
 
class CCar : public CVehicle
{
public:
   CCar
   (const Coords& coords, const double amount, const size_t speed, const size_t year):
   CVehicle(coords, amount, speed, year)
   {
   }
   CCar(const double amount, const size_t speed, const size_t year):
   CCar(Coords(), amount, speed, year)
   {
   }
   virtual ~CCar()
   {
   }
   virtual Type get_type() const { return Type::Car; }
};
 
typedef std::shared_ptr<CVehicle> base_t;
 
int main()
{
   std::list<base_t> lst = 
   {
      base_t(new CCar(100, 300, 1990)),
      base_t(new CShip(1000, 200, 1990, 1000, "MOW")),
      base_t(new CPlane(1000, 200, 1990, 10000, 500))
   };
   std::for_each(lst.begin(), lst.end(), [](const base_t& value)
   {
      const CVehicle::Coords& coords = value->get_coords();
      std::cout << "Coords: " << coords.x << " " << coords.y << std::endl;
      std::cout << "Speed: " << value->get_speed()
       << " Amount: " << value->get_amount()
       << " Year: " << value->get_year() << std::endl;
   });   
   std::list<base_t>::iterator iter = lst.begin();
   ++iter;
   CShip* ship = dynamic_cast<CShip*>(iter->get());
   std::cout << "Pass no: " << ship->get_pass_no() << " Port: " << ship->get_port() << std::endl;
   ++iter;
   CPlane* plane = dynamic_cast<CPlane*>(iter->get());
   std::cout << "Pass no: " << plane->get_pass_no() << " Height: " << plane->get_height() << std::endl;
}
http://liveworkspace.org/code/e3a2ff...26b005d4e25d17
3
patricksmirnov
74 / 74 / 10
Регистрация: 28.02.2010
Сообщений: 159
31.03.2012, 11:31  [ТС] #5
ForEveR, спасибо большое, но очень сложно. знаний не хватает разобраться.
Как я понял, мне необходимо просто организовать динамический полиморфизм?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 11:31
Привет! Вот еще темы с ответами:

Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема - C++
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема:...

Создать абстрактный класс Integer - C++
Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на экран. Определить...

Создать абстрактный класс Vehicle - C++
Создать абстрактный класс Vehicle (транспортное средство). На его основе реализовать классы Plane (самолет), Саг (автомобиль) и Ship...

Создать абстрактный класс - млекопитающие - C++
Помогите пожалуйста с задачей! задача: на языке с++ Создать абстрактный класс -млекопитающие. Определить производные классы -...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
31.03.2012, 11:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru