#include <iostream>
#include <string>
using namespace std;
class Part{
public:
std::string spec;
Part(std::string str){
this->spec = str;
}
std::string getSpec(){
return spec;
}
};
class Car{
public:
Part getEngine();
Part getWheels();
Part getBody();
};
class Benz:public Car{
public:
Part getEngine(){
return Part("Benz Engine");
}
Part getWheels(){
return Part("Benz Wheels");
}
Part getBody(){
return Part("Benz Body");
}
};
class Audi:public Car{
public:
Part getEngine(){
return Part("Audi Engine");
}
Part getWheels(){
return Part("Audi Wheels");
}
Part getBody(){
return Part("Audi Body");
}
};
class CarFactory{
public:
Car *pcar;
Car *getCar(std::string carType){
if (carType.compare("Benz") == 0){
pcar = new Benz();
}else if (carType.compare("Audi") == 0){
pcar = new Audi();
}
return pcar;
}
};
int main(){
CarFactory *cf = new CarFactory();
Car *mycar = cf->getCar("Benz");
Part myCarBody = mycar->getBody();
cout <<myCarBody.getSpec() <<endl;
//cout << mycar->getBody().getSpec() <<endl;
}
在上面的代碼獲得,未定義的在參考線部分myCarBody = mycar-> getBody到對象錯誤();主功能線。你可以幫我固定這一點,也請解釋汽車* mycar和車mycar之間的差異。哪一個選擇什麼時候?未定義參照對象錯誤
感謝您的幫助。的Car
'Car * mycar'是指向'Car'的指針; '汽車mycar'是一個實際的'汽車'對象。你需要在指針上使用箭頭(' - >')符號;你需要在對象中使用點('.')符號。在這種情況下,指針比對象更有可能是有益的。這往往是這樣,但並非總是如此。 –
這段代碼中的繼承模型有很多不足之處。所有'Benz'對象都表現相同;所有的'奧迪'對象都表現相同。那很糟。這是古董,但湯姆嘉吉的書[C++編程風格](http://www.amazon.com/C-Programming-Style-Tom-Cargill/dp/0201563657)詳細討論了這個和其他一些常見問題。 –
@Kranthi請接受任一答案。是時候了。 – LogicStuff