【发布时间】:2014-06-05 11:26:13
【问题描述】:
我在将继承的类类型作为参数传递给采用其基类类型的方法时遇到问题。
class Base {...}
class Derived : public Base {...}
class Container {
vector<Base*> cont; //1
public:
void addToCont(Base x) { //2
cont.push_back(&x);
}
}
int main() {
Container c;
c.addToCont(Derived(p1,p2)); //3
}
1) 我想我需要有指向对象的指针容器来保持它的工作
2) 这是从 Derived 到 Base 的转换错误
3) 我不应该改变这个电话。我试过了
Derived d(p1,p2);
c.addToCont(d);
与
addToCont(Base& x)
它对我有用。
我的问题是我有 3 个派生类,我不想重载 add 方法 3 次。我想我将不得不为这些类添加一些虚拟方法或一些类型转换,但我找不到任何相关信息。我是继承新手,对此很困惑。感谢您的所有帮助。
【问题讨论】:
-
请发布您的真实代码,而不是这个充满语法错误和未声明标识符的伪 sn-p。见SSCCE
-
重复摘要:您有未定义的行为,因为您正在存储指向临时对象的指针。
标签: c++ inheritance methods