最适合作为多态继承类的基类对象与子类对象之间的相互转换
时间: 2024-05-14 10:14:56 浏览: 119
最适合作为多态继承类的基类对象与子类对象之间的相互转换是使用指针或引用进行转换。这是因为指针或引用可以指向基类对象和子类对象,并且可以通过动态绑定实现多态性。通过使用指针或引用进行转换,可以保持对象的类型信息并避免对象切片问题。例如:
```c++
class Base {
public:
virtual void foo() {
cout << "Base::foo()" << endl;
}
};
class Derived : public Base {
public:
void foo() override {
cout << "Derived::foo()" << endl;
}
};
int main() {
Base* b = new Derived;
b->foo(); // Derived::foo()
Derived* d = dynamic_cast<Derived*>(b);
if (d != nullptr) {
d->foo(); // Derived::foo()
}
Base* b2 = new Base;
Derived* d2 = dynamic_cast<Derived*>(b2);
if (d2 != nullptr) {
d2->foo(); // 不会执行
}
delete b;
delete b2;
return 0;
}
```
在上面的代码中,我们创建了一个基类指针指向子类对象,并通过虚函数实现了多态性。然后使用 `dynamic_cast` 进行基类指针到子类指针的转换,如果转换成功则可以调用子类的成员函数。如果转换失败则返回 `nullptr`。在转换时需要注意安全性,避免出现空指针或野指针的问题。
阅读全文