C ++ - Конструктор, где параметры используются конструктором базового класса - PullRequest
4 голосов
/ 14 марта 2012

У меня есть класс Car, который наследует класс Vehicle.Класс Car и Vehicle принимает параметр «колеса».Исходя из моего понимания того, как работает наследование, объект Car будет создаваться в два этапа: сначала сначала будет создан Vehicle, вызвав его Constructor, а затем Car, который также вызовет его конструктор.Мой вопрос: как мне написать конструктор моего автомобиля, когда его параметры используются конструктором корабля?

class Vehicle {
public:
    Vehicle(int wheels);
};

class Car {
public:
    Car(int wheels): Vehicle(wheels);
};

Ответы [ 5 ]

10 голосов
/ 14 марта 2012

Вам необходимо наследовать от Транспортного средства:

Заголовочный файл:

class Car: public Vehicle {
public:
    Car(int wheels);
};

Cpp файл:

Car::Car(int wheels): Vehicle(wheels) {
}
4 голосов
/ 14 марта 2012

Вы передаете колеса конструктору Vehicle, а затем обрабатываете дополнительные параметры в конструкторе Car.

class Car : public Vehicle {
public:
    Car(int otherParam, int wheels);
};

Car::Car(int otherParam, int wheels) : Vehicle(wheels) {
    //do something with other params here
}

Конечно, вы можете иметь несколько других параметров, и они не обязательно должны быть целыми;)

РЕДАКТИРОВАТЬ: я также забыл наследовать от транспортного средства в моем первоначальном примере, спасибо perreal за указание на это.

0 голосов
/ 14 марта 2012

То, что вы ищете:

Car::Car(int wheels)
:Vehicle(wheels) 
{
 // Do Car constructor specific stuff here.
}

:Vehicle(wheels) передаст параметр колес вверх по линии конструктору Vehicle и построит в порядке, который вы описываете.

0 голосов
/ 14 марта 2012

Ну, во-первых,

      class Car:public Vehicle{...

Я не уверен, что вы подразумеваете под "как бы я написал конструктор myCars"

      Vehicle(int wheels):m_Wheels(wheels)
      {
           // or m_Wheels = wheels;
      }
      ...
      Car(int wheels):Vehicle(wheels)
      {
             if(m_Wheels != 4)
                  fprintf(stdout, "Uh Oh");
      }

В этом случае вызывается конструктор транспортного средства, а затемавтомобиль конструктор называется.Обратите внимание, что я могу использовать m_Wheels в машине, как это было инициализировано в машине.

Это отвечает на ваш вопрос?

0 голосов
/ 14 марта 2012

Любой встроенный:

Car(int wheels) : Vehicle(wheels) { }

Или вне линии:

class Car : public Vehicle {
  Car(int); 
  // ...  
};

Car::Car(int wheels) : Vehicle(wheels) { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...