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

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

Войти
Регистрация
Восстановить пароль
 
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
#1

Конструкторы при наследовании - C++

08.11.2013, 20:52. Просмотров 382. Ответов 1
Метки нет (Все метки)

Описал большую иерархию классов. Надо написать конструкторы, правда уже не очень понимаю как в Си писать конструкторы, к тому же при наследовании.
Помогите на примере куска из иерархии
Кликните здесь для просмотра всего текста
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
class vehicle // абстрактный
{
protected:
    std::string brand;
    std::string model;
    float engine_volume;
    int number_of_cylinders;
    int full_weight;
    int weight;
    int gears;
    enum cylinders_configuration;
    enum color;
    virtual void output() const = 0;
    virtual void edit() const = 0;
};
 
class car:public vehicle // тоже абстрактный
{
    int number_of_doors;
    enum design_of_the_vehicle_transmission;
};
 
class car_passenger:public car // будут создаваться обьекты
{
 
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2013, 20:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструкторы при наследовании (C++):

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Конструкторы с параметрами при множественном наследовании - C++
у меня есть класс, quotes который является базовым для двух классов moving_average и rsi (наследуются от quotes чз virtual) эти два класса...

Конструкторы и деструкторы при наследовании. Пара вопросов - C++
1. Можно ли создавать виртуальный конструктор/деструктор и переопределять его без создания нового конструктора в производном классе? 2....

Использование шаблонов при наследовании, ошибка при компиляции - C++
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

Сравнение при наследовании - C++
Есть базовый класс, пусть его зовут А, а у него есть 4 потомка. Пусть их зовут: B, C, D и E. Базовый класса абстрактный,в нём есть...

Деструктор при наследовании - C++
Имеется 3 класса (базовый -> производный -> производный2) в классе базовый имеется переменная char* var; в производном тоже есть 1...

1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.11.2013, 23:18 #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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <cstring>
 
class Vehicle {
 public:
  Vehicle(const std::string &brand, const std::string &model)
    : brand(brand), model(model) {}
  const std::string &getBrand() const { return brand; }
  const std::string &getModel() const { return model; }
  virtual ~Vehicle() = 0; // вот так можно сделать класс вируальным
 private: // все свойства приватные
  std::string brand;
  std::string model;
  /*
   * Для краткости закомментировал остальные параметры.
  float engine_volume;
  int number_of_cylinders;
  int full_weight;
  int weight;
  */
  /*
   * Т.с. не обязательно должно быть колесное
  int gears;
  */
  /*
   * Непонятно, что хотел сказать автор объявлением энума
  enum cylinders_configuration;
  enum color;
  */
  /*
   * Эти действия должны быть внешние, потому что это то, что делают
   * с объектом, а не то, что делает сам объект
  virtual void output() const = 0;
  virtual void edit() const = 0;
  */
};
 
// а это, чтобы компилятор не ругался, что функции нет
inline Vehicle::~Vehicle() {}
 
class Car : public Vehicle {
 public:
  Car(const std::string &brand, const std::string &model, int numberOfDoors)
   : Vehicle(brand, model), // вызов конструктора предка
   numberOfDoors(numberOfDoors) {}
  int getNumberOfDoors() const { return numberOfDoors; }
  virtual ~Car() {} // делаем класс конкретным, реализуя виртуальный метод
 private:
  // не самый лучший выбор, ну да б-г с ним
  int numberOfDoors;
};
 
/*
 * Непонятно, что хотел сказать автор, пассажир автомобиля не
 * является автомобилем (если только Бамблби не залез)
class car_passenger:public car // будут создаваться обьекты
{
 
};
*/
 
/**
 * Функция в виде оператора для вывода машин
 */
std::ostream &operator<<(std::ostream &stream, const Car &c) {
  return stream << "Car{" <<
    "brand=\"" << c.getBrand() <<
    "\", model=\"" << c.getModel() <<
    "\", numberOfDoors=" << c.getNumberOfDoors() <<
    "}"; 
}
 
int main(int, char**) {
  //Vehicle v("Suzuki", "Muzuki"); // не выйдет, абстрактный
  Car c("Suzuki", "Muzuki", 12);
  
  // то же самое, что и "operator<<(std::cout, c);"
  std::cout << c << std::endl;
  
  return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2013, 23:18
Привет! Вот еще темы с ответами:

Ошибка при наследовании - C++
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает данные из файла и строит графики ...

Неоднозначность при наследовании - C++
Привет народ, думаю мой вопрос покажется вам чем-то из разряда &quot;лучше бы делом занялся&quot;, но тех у кого останется терпение, прошу помочь мне...

Ошибка при наследовании - C++
Привет! Ни как не могу разобраться, в чём дело. Создал 2 класса: Base и Derived, где Derived наследует Base. Но при компиляции возникает...

Ошибка при наследовании - C++
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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