Sve*_*ger 1 c++ methods virtual inheritance
我有一个关于继承和虚方法的基本C++问题.
请考虑以下代码:
#include <iostream>
#include <vector>
using namespace std;
class A {
public:
virtual void f() {cout << "A\n";};
};
class B : public A {
public:
void f() {cout << "B\n";};
};
int main() {
A a;
B b;
vector<A> v;
v.push_back(a);
v.push_back(b);
for (int i = 0; i < v.size(); ++i)
v.at(i).f();
}
Run Code Online (Sandbox Code Playgroud)
如果我执行此代码,它会打印出来
A
A
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它不打印
A
B
Run Code Online (Sandbox Code Playgroud)
因为"f"方法被声明为虚拟.我想知道为什么程序以这种方式运行.
提前致谢
您的向量包含A对象:
vector<A> v;
Run Code Online (Sandbox Code Playgroud)
当您将B对象推入其中时,向量会将其中的A一部分复制到新A对象中.它相当于这样做:
A a;
B b;
a = b;
a.f();
Run Code Online (Sandbox Code Playgroud)
这称为对象切片.