2015-07-23 2 views
0

Salut les gars. Je ne sais pas comment je suppose à propos de la définition des valeurs à des classes dérivées ctor. Et voici mon code. Je me souviens de quelque chose comme ça construit dans ma classe. Mais je sais que nous pouvons écrire quelque chose comme ça build (xxx(): yyy() {,,,};). Vérifiez le deuxième objet principal.Valeur de réglage C++ du ctor paramétré dérivé

#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; 
} 

Répondre

0

Puisque vous allouent instance de voiture de classe qui est classe dérivée de sorte qu'il appelle les deux cteurs. D'abord il appellera le ctor de classe 'véhicule' puis 'voiture'. [Lire l'ordre d'appel de ctor dans l'héritage de cas]

+0

J'ai effectué question. L'objectif est de définir des valeurs avec le constructeur dans main. –

+0

Non 'voiture (5," essence "): véhicule (" mercedes ", 4,489.12);' [est une erreur de compilation] (http://coliru.stacked-crooked.com/a/da72496c85180da0) – NathanOliver

1

La syntaxe ctor(...):base(...){} est utilisée lors de la définition du constructeur de classe dérivée, pas lors de l'instanciation d'un objet. Donc, changer le constructeur de car à ceci:

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

Et instancier votre car objet comme celui-ci:

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

Mieux encore, tirer parti de la syntaxe d'initialisation de membre de C++ pour définir vos constructeurs:

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

Vous devez coder ceci dans le constructeur pour que cela fonctionne. Quand vous dérivez d'une classe le constructeur de cette classe dérivée doit prendre dans les paramètres pour le constructeur de base et sa propre construction.

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 
}; 

Donc, pour vous par exemple le constructeur de car deviendrait:

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

Merci beaucoup. Cela me sera très utile: D –