2015-07-23 8 views
0

Эй, ребята. Я не знаю, как я полагаю, что нужно устанавливать значения для производных классов ctor. И вот мой код. Я помню что-то подобное в моем классе. Но я знаю, что мы можем написать что-то вроде этой сборки (xxx(): yyy() {,,,};). Проверьте второй объект объекта.Значение настройки C++ для производного параметра. Ctor

#include <iostream> 

using namespace std; 

class vehicle 
{ 
protected: 
    string brand; 
    int wheelNumber; 
    double maxSpeed=0; 
public: 
    vehicle(){cout<<"default ctor for vehicle"<<endl;} 
    vehicle(string br1, int wn1, double ms1) 
    {brand=br1; wheelNumber=wn1; maxSpeed=ms1;} 

    void setbrand(string br){brand=br;} 
    string getbrand(string br){return brand;} 
    void setWN(int wn){wheelNumber=wn;} 
    int getWN(int wn){return wheelNumber;} 
    void setMaxS(double ms){maxSpeed=ms;} 
    double getMaxS(double ms){return maxSpeed;} 
    ~vehicle(){cout<<"dtor for vehicle."<<endl;} 
}; 
class car: public vehicle 
{ 
private: 
    int numberOfDoors; 
    string fuelType; 
public: 
    car(){cout<<"default ctor for car"<<endl;} 
    car(int nOD,string fT){numberOfDoors=nOD; fuelType=fT;} 

    void setnOD(int nOD){numberOfDoors=nOD;} 
    int getnOD(int nOD){return numberOfDoors;} 
    void setfT(string fT){fuelType=fT;} 
    string getfT(string fT){return fuelType;} 

    void printFeatures() 
    { 
     cout<<endl; 
     cout<<"brand:"<<brand<<endl; 
     cout<<"wheelNumber:"<<wheelNumber<<endl; 
     cout<<"MaxSpeed:"<<maxSpeed<<endl; 
     cout<<"NumberOfDoors:"<<numberOfDoors<<endl; 
     cout<<"FuelType:"<<fuelType<<endl<<endl; 
    } 
    ~car(){cout<<"dtor for car."<<endl;} 
}; 

int main() 
{ 
    car *cc; 
    cc= new car; 
    cc->setbrand("bmw"); 
    cc->setfT("diesel"); 
    cc->setMaxS(333.25); 
    cc->setWN(4); 
    cc->setnOD(6); 
    cc->printFeatures(); 
    delete cc; 

    car *xx; 
    xx= new car; 
    car(5,"gasoline"):vehicle("mercedes",4,489.12);//Part that i cant figure it out. 
    xx->printFeatures(); 
    delete xx; 
} 

ответ

0

Поскольку вы выделение экземпляра класса автомобиля, который является производным классом так называют оба ctors. Сначала он назовет ctor класса «автомобиль», а затем «автомобиль». [Прочитать порядок вызова ctor в случае наследования]

+0

Я редактировал вопрос. Цель - установить значения с помощью конструктора в main. –

+0

Нет «автомобиль (5,« бензин »): автомобиль (« mercedes », 4,489.12);' [является ошибкой компилятора] (http://coliru.stacked-crooked.com/a/da72496c85180da0) – NathanOliver

1

Синтаксис ctor(...):base(...){} используется при определении конструктора производного класса, а не при создании экземпляра объекта. Таким образом, изменить конструктор car к этому:

car(int nOD,string fT, string br1, int wn1, double ms1): vehicle(br1, wn1, ms1) { 
    numberOfDoors=nOD; fuelType=fT; 
} 

И создать экземпляр car объекта, как это:

xx= new car(5,"gasoline", "mercedes",4,489.12); 

Еще лучше, если воспользоваться синтаксисом членом-инициализации С ++, чтобы определить ваши конструкторы:

vehicle(string br1, int wn1, double ms1) 
:brand(br1), wheelNumber(wn1), maxSpeed(ms1) 
{} 

// ... 

car(int nOD,string fT, string br1, int wn1, double ms1) 
: vehicle(br1,wn1, ms1), numberOfDoors(nOD), fuelType(fT) 
{} 
1

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

class Base 
{ 
    int foo; 
public: 
    Base(int f) : foo(f) {}; 
}; 

class Derived : public Base 
{ 
    int bar; 
public: 
    Derivced(int f, int b) : Base(f),     bar(b) {} 
          ^^^^^^^     ^^^^^^^^^ 
          construct the base part constrcut the derived part 
}; 

Так что для вас, например конструктор car станет:

car(string br1, int wn1, double ms1, int nOD,string fT) : vehicle(br1, wn1, ms1), 
                  numberOfDoors(nOD), 
                  fuelType(fT) {} 
+0

Большое спасибо. Это будет очень полезно для меня: D –

 Смежные вопросы

  • Нет связанных вопросов^_^