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

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

Восстановить пароль Регистрация
 
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
08.11.2013, 20:52     Конструкторы при наследовании #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 // будут создаваться обьекты
{
 
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2013, 20:52     Конструкторы при наследовании
Посмотрите здесь:

C++ Ошибка при наследовании
C++ Ошибка при наследовании
Конструкторы и деструкторы при наследовании. Пара вопросов C++
Конструкторы при наследовании C++
С++ течет при наследовании C++
C++ Ошибка при наследовании?
Деструктор при наследовании C++
C++ Присвоение при наследовании

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
Yandex
Объявления
08.11.2013, 23:18     Конструкторы при наследовании
Ответ Создать тему
Опции темы

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