重写的话,除了用基类指针调用子类方法,还有什么方法
时间: 2024-04-14 20:25:41 浏览: 26
除了通过基类指针调用子类方法外,还有以下几种方法可以调用子类中重写的方法:
1. 使用子类对象调用:如果你有一个子类对象,你可以直接使用该对象调用子类中重写的方法。这样做不需要借助基类指针,可以直接调用子类中的方法。
```cpp
Base* baseObj = new Derived(); // 通过基类指针创建子类对象
Derived* derivedObj = dynamic_cast<Derived*>(baseObj); // 将基类指针转换为子类指针
// 通过子类对象调用重写的方法
derivedObj->overrideFunction();
```
2. 使用引用调用:如果你有一个子类对象的引用,你也可以直接使用该引用调用子类中重写的方法。这和使用子类对象调用是类似的,不需要借助基类指针。
```cpp
Derived derivedObj; // 子类对象
Base& baseRef = derivedObj; // 使用子类对象的引用
// 通过引用调用重写的方法
baseRef.overrideFunction();
```
3. 在子类中调用:如果你在子类中需要在重写的方法中调用父类的同名方法,可以使用作用域解析运算符`::`来指定父类的方法。
```cpp
class Base {
public:
virtual void overrideFunction() {
cout << "Base::overrideFunction()" << endl;
}
};
class Derived : public Base {
public:
void overrideFunction() {
Base::overrideFunction(); // 调用父类的同名方法
cout << "Derived::overrideFunction()" << endl;
}
};
```
通过上述方法,你可以在子类中直接调用父类的同名方法,以实现在子类中重写父类方法的同时保留父类方法的功能。
总的来说,除了使用基类指针调用子类方法外,你还可以使用子类对象、引用以及在子类中调用父类方法的方式来调用子类中重写的方法。具体使用哪种方式取决于你的需求和设计。