【发布时间】:2017-05-12 17:45:19
【问题描述】:
我的基类称为Account,而派生类Businessaccount 有一个额外的int 变量称为x,以及一个getter 方法(int getx())。
切片应该在以下情况下发生吗?这显然发生在我的案例中:
vector<shared_ptr<Account>> vec;
shared_ptr<Businessaccount> sptr = make_shared<Businessaccount>();
vec.push_back(sptr);
之后,如果我这样做:
(*vec.at(0)).getx();
它说class<Account> 没有名为getx() 的成员!
如果有人能告诉我为什么会发生这种情况以及如何解决它,我将不胜感激。
【问题讨论】:
-
这不是切片,但是编译器当然是对的,
at()返回的指针不能直接用来访问派生类的成员函数 -
Account是否有名为getx()的成员? -
通过指针调用方法的典型方式是
->运算符。vect.at(0)->getx();.
标签: c++ object-slicing