【发布时间】:2013-04-02 10:48:38
【问题描述】:
我正在使用 c++11 智能指针重写应用程序。
我有一个基类:
class A {};
还有一个派生类:
class B : public A {
public:
int b;
};
我有另一个类包含带有 A 或 B 对象的向量:
class C {
public:
vector<shared_ptr<A>> v;
};
用 A(基类)对象构造 C 没有问题,但是如何用 B(派生类)对象填充它?
我正在尝试这个:
for(int i = 0; i < 10; i++) {
v.push_back(make_shared<B>());
v.back()->b = 1;
};
编译器返回: 错误:“A 类”没有名为“b”的成员
【问题讨论】:
-
你想做什么?听起来将 A 视为多态是一个错误的想法,因为您不会使用它。
-
这与智能指针无关,您错误地使用了多态性。将 public b 成员替换为虚函数(可能是 get 和 set 函数)。
-
我已经简化了课程。在它们的真实形式中,多态是有意义的。
-
那么听起来简化的例子并不能代表真正的问题。
标签: c++ polymorphism smart-pointers