【发布时间】:2011-09-05 23:40:25
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;
class Parent {
public:
Parent();
void method();
};
class Child: public Parent {
public:
Child();
void method();
};
int main() {
vector<Parent> v;
v.push_back(Parent());
v.push_back(Child());
v[0].method();
v[1].method();
return 0;
}
Parent::Parent() {}
void Parent::method() {
cout << "Parent." << endl;
}
Child::Child() {}
void Child::method() {
cout << "Child." << endl;
}
基本上我希望该程序能够打印
Parent.
Child.
但它会打印出来:
Parent.
Parent.
C++ 再次让我感到惊讶 :)。
为什么会这样?对于向量中的 Child 实例调用 Child::method 并为 Parent 实例调用 Parent::method 该怎么做?
我正在使用 gcc:
gcc version 4.6.1 20110819 (prerelease) (GCC)
像这样:
g++ -Wall -Wextra -c main.cpp
g++ -Wall -Wextra -o main main.o
【问题讨论】:
-
@Tomalak:我搜索过。很多。但是我怎么知道这叫做“切片”呢? ://
-
搜索
parent child vector c++可能会做到这一点。 -
@Tomalak:嗯,我不认为这是一个普遍的问题,也许认为这有点牵强。但是点了,我的错。
标签: c++ oop vector polymorphism stdvector