C++ 如何从的父类指针知道自己指向的是哪个子类?
时间: 2024-05-13 16:17:28 浏览: 119
C++ 指向类成员的指针
5星 · 资源好评率100%
在 C++ 中,可以使用 `dynamic_cast` 运算符来实现从父类指针知道自己指向的是哪个子类。示例如下:
```cpp
class Base {
public:
virtual ~Base() {}
};
class DerivedA : public Base {
public:
void doSomethingA() {}
};
class DerivedB : public Base {
public:
void doSomethingB() {}
};
int main() {
Base* basePtr = new DerivedA();
// 使用dynamic_cast将基类指针转换为子类指针
DerivedA* derivedAPtr = dynamic_cast<DerivedA*>(basePtr);
if (derivedAPtr) {
derivedAPtr->doSomethingA();
}
// 使用dynamic_cast将基类指针转换为另一个子类指针
DerivedB* derivedBPtr = dynamic_cast<DerivedB*>(basePtr);
if (derivedBPtr) {
derivedBPtr->doSomethingB();
}
delete basePtr;
return 0;
}
```
在上面的代码中,我们首先定义了一个 `Base` 类作为基类,然后又定义了两个派生类 `DerivedA` 和 `DerivedB`。在 `main()` 函数中,我们创建了一个 `Base` 类型的指针 `basePtr`,并将其指向 `DerivedA` 类的一个实例。接着,我们使用 `dynamic_cast` 运算符将 `basePtr` 转换为 `DerivedA` 类型的指针 `derivedAPtr`,并检查转换是否成功(因为有可能 `basePtr` 实际指向的是 `DerivedB` 类的实例)。如果转换成功,就可以使用 `derivedAPtr` 调用 `DerivedA` 类的成员函数 `doSomethingA()`。同样地,我们也可以使用 `dynamic_cast` 将 `basePtr` 转换为 `DerivedB` 类型的指针 `derivedBPtr`,并检查转换是否成功。
阅读全文