struct A {};
struct B : A {};
int main()
{
A* a = new B();
B* b = dynamic_cast<B*>(a);
}
Run Code Online (Sandbox Code Playgroud)
得到:
我如何制作A多态?我想安全地把它投到B.
(一种方法是添加一个虚拟虚函数,但是有更好的方法吗?)
jua*_*nza 96
您需要创建A多态,您可以通过添加virtual析构函数或任何虚函数来执行:
struct A {
virtual ~A() = default;
};
Run Code Online (Sandbox Code Playgroud)
或者,在C++ 11之前,
struct A {
virtual ~A() {}
};
Run Code Online (Sandbox Code Playgroud)
请注意,如果您打算通过指向基类的指针安全地在派生类型的实例上调用delete,则多态类型应该具有虚拟析构函数.
Luc*_*ore 11
您至少需要一个virtual函数 - 通常,如果没有其他函数适合,则析构函数:
struct A {
virtual ~A() {}
};
Run Code Online (Sandbox Code Playgroud)
正如编译器所说,您的类型A不是多态的。您应该virtual为其添加一个功能。例如,virtual析构函数可能是一个不错的选择:
struct A { virtual ~A() { } };
// ^^^^^^^ This makes A a polymorphic type
struct B : A {};
int main()
{
A* a = new B();
B* b = dynamic_cast<B*>(a); // Should work now
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28362 次 |
| 最近记录: |