【发布时间】:2013-06-26 11:54:35
【问题描述】:
对不起,如果之前有人问过这个问题,刚学C++,曾尝试搜索但不知道关键字是什么。
可以这样做吗?
class Car {
public:
void addColor(string c) {
color = c;
}
private:
string color;
}
class Honda:public Car {}
class Toyota:public Car {}
int main() {
vector<Car> v;
Honda *car1 = new Honda();
car1.addColor("green");
Toyota *car2 = new Toyota();
car2.addColor("blue");
v.push_back(car1);
v.push_back(car2);
for (int i = 0; i < v.size(); i++) {
cout << v[i].color << endl; // should output green, blue
}
}
如果可能,最正确/最有效的方法是什么?
编辑 1
哇,谢谢大家!
【问题讨论】:
-
简短:是的。如果您可以使用接口函数处理所有事情,那就没问题了。如果您只需要一个派生类中的一个函数,您很可能需要 RTTI(在 foreach 循环中向下转换)
-
一方面,颜色是一个私有变量。您将通过其他方式获得价值
-
您将需要一个容器来保存指向
Car的(智能)指针,而不是您现在拥有的Car对象。 -
@juanchopanza 在这里绝对不需要智能指针!
-
@Jerska 对,
new也不是。
标签: c++