#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