Cha*_*son 0 c++ polymorphism virtual-functions
我在使用自动存储持续时间声明的对象使用虚函数时遇到问题.这是一个可重现的场景:
#include <iostream>
class A {
public:
A() {}
virtual ~A() {}
virtual void printClassName() {
std::cout << "A" << std::endl;
}
};
class B : public A {
public:
B() : A() {}
~B() {}
void printClassName() {
std::cout << "B" << std::endl;
}
};
class Test {
private:
A item;
public:
Test() {}
~Test() {}
void setItem(A item) {
this->item = item;
}
A getItem() {
return this->item;
}
};
int main() {
Test t;
B item;
t.setItem(item);
t.getItem().printClassName();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印"A",而我希望它打印B.我很好奇为什么.
先感谢您!
你在这里切片:
void setItem(A item) {
this->item = item;
}
Run Code Online (Sandbox Code Playgroud)
B当你item进入时setItem(),这部分被切掉了,所以你失去了它的基础部分.如果A是抽象的,这将是一个更明显的错误(因为你不能按值存储抽象类).
相反,您将要将项目存储为指针.