C++中基类调用子类的方法有哪些
时间: 2023-11-14 09:04:04 浏览: 289
在 C 中,基类调用子类的方法主要有两种方式:
1. 使用函数指针:基类定义一个函数指针成员变量,子类实现这个函数,并将函数指针赋值给基类的函数指针成员变量,从而让基类可以调用子类的方法。
2. 使用虚函数:在基类中将需要调用的方法声明为虚函数,子类继承基类并实现这个虚函数,在基类中调用该虚函数时,会自动调用子类中实现的对应方法。
相关问题
C++中基类使用虚函数怎么调用多个子类
的同名虚函数?
在C++中,如果一个类中有虚函数,当其被子类继承后,子类可以覆盖这个虚函数。当基类指针或引用指向一个子类对象时,调用同名虚函数时,实际调用的是子类的虚函数(如果子类没有覆盖该虚函数,则调用基类的虚函数)。
如果要同时调用多个子类的同名虚函数,可以考虑使用多态和动态绑定的特性。可以定义一个基类指针数组,数组的每个元素都指向一个不同的子类对象,然后循环遍历数组,调用每个子类对象的同名虚函数。这样就能够调用多个子类的同名虚函数了。
c++使用基类指针指向子类
在C++中,你可以使用基类指针或引用来指向子类的对象。这种设计被称为"多态性"的一种形式,也叫做动态绑定。通过基类指针,你可以在运行时不确定具体对象的实际类型,而只关心其共享的公共特性。
例如,假设有一个基类`Shape`,它有两个子类`Circle`和`Square`。你可以这样做:
```cpp
class Shape {
public:
virtual void draw() {
// 默认行为
cout << "Drawing a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() override {
cout << "Drawing a circle." << endl;
}
};
class Square : public Shape {
public:
void draw() override {
cout << "Drawing a square." << endl;
}
};
// 使用基类指针
Shape* pointerToShape; // 或者Shape& referenceToShape;
// 创建并初始化子类对象
Circle circle;
Square square;
// 使用基类指针存储子类对象
pointerToShape = &circle; // 或者referenceToShape = &circle;
pointerToShape->draw(); // 输出 "Drawing a circle."
// 改变指针指向
pointerToShape = □
pointerToShape->draw(); // 输出 "Drawing a square."
```
这样,当你通过基类指针调用`draw()`方法时,实际执行的是子类的实现,这就是多态性的体现。
阅读全文