C++ 父类中有一个函数A,子类重写了函数A, 如何实现在父类的B函数中调用子类的A函数
时间: 2024-10-18 18:18:04 浏览: 48
C++/JAVA/C#子类调用父类函数情况总结
在 C++ 中,如果你想在父类 B 函数中调用子类重写后的 A 函数,你可以通过指针或者引用来实现 polymorphism(多态)。这里是一个简单的例子:
```cpp
class Base {
public:
virtual void A() { // 父类的 A 函数
std::cout << "Base Class: calling A()\n";
}
void B() {
// 创建子类的对象指针或者引用
Derived* derivedPtr = dynamic_cast<Derived*>(&someObject); // 假设 someObject 是 Base 的实例
if (derivedPtr) {
// 调用子类的 A 函数
derivedPtr->A(); // 这里会执行 Derived 类型下的 A 实现
} else {
// 如果无法动态转换(即 someObject 不是 Derived),可以处理异常或默认行为
std::cout << "Derived not available for call in B()\n";
}
}
};
class Derived : public Base {
public:
override void A() override { // 子类的 A 函数
std::cout << "Derived Class: overriding A()\n";
}
};
// 使用示例
Base baseObj;
Derived derivedObj;
baseObj.B(); // 输出:Base Class: calling A()
derivedObj.B(); // 输出:Derived Class: overriding A()
```
在这个例子中,`B` 函数通过 `dynamic_cast` 将 `Base` 类型转换为 `Derived` 类型,如果成功则可以安全地调用 `A` 函数,因为此时指向的是 `Derived` 对象。如果转换失败,说明不是 `Derived` 类型,程序会提供默认的行为。
阅读全文