c+++基类指针转子类指针
时间: 2024-10-15 13:03:30 浏览: 24
在C++中,基类指针可以安全地转换为指向其派生类的对象,这种操作被称为“向下转型”(Downcast)。如果基类指针实际上指向的是一个派生类的对象,那么这种转换通常是允许的,因为基类包含了派生类的所有公共成员。
例如,假设有一个基类`Base`和一个派生类`Derived`:
```cpp
class Base {
public:
virtual void doSomething() { /*...*/ }
};
class Derived : public Base {
public:
void doSomethingExtra() { /*...*/ }
};
```
如果你有`Base* basePtr`指向一个`Derived`对象,你可以这样做:
```cpp
Derived derivedObj;
Base* basePtr = &derivedObj; // 基类指针
// 下面这行是安全的,前提是你确定basePtr确实指向Derived对象
Derived* derivedCast = dynamic_cast<Derived*>(basePtr);
if (derivedCast) {
derivedCast->doSomethingExtra(); // 调用派生类特有的方法
}
```
注意,如果没有显式指定为`dynamic_cast`,则会隐式转换为`Base*`,不会访问到派生类的额外功能。而`dynamic_cast`用于类型检查,并处理可能的空指针异常(如果`basePtr`不是`Derived`类型的对象)。
阅读全文