虚拟函数:允许派生类重写基类中的函数。当基类指针指向派生类对象时,调用派生类的虚拟函数。虚继承:解决多重继承中的菱形继承问题。确保每个基类在派生类中只存在一个实例。

虚拟函数是 C++ 中一种特殊类型的成员函数,允许派生类重写基类中的函数。当基类指针或引用指向派生类对象时,将会调用派生类的虚拟函数。
class Shape {
public:
virtual double area() const = 0; // 纯虚函数
};
class Rectangle : public Shape {
public:
Rectangle(double width, double height) : m_width(width), m_height(height) {}
double area() const override { return m_width * m_height; } // 重写虚函数
private:
double m_width;
double m_height;
};虚继承是一种技术,用于解决多重继承中发生的菱形继承问题(也称为多重继承的歧义性)。
class Animal {
public:
virtual void speak() const { cout << "Animal speaks" << endl; }
};
class Dog : virtual public Animal { // 虚继承
public:
void speak() const override { cout << "Dog barks" << endl; }
};
class Cat : virtual public Animal { // 虚继承
public:
void speak() const override { cout << "Cat meows" << endl; }
};
class SiberianHusky : public Dog, public Cat { // 多重继承
public:
void speak() const override { cout << "Siberian Husky howls" << endl; }
};虚继承确保每个基类(Animal)在派生类(SiberianHusky)中只存在一个实例,从而避免菱形继承问题。
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
using namespace std;
class Shape {
public:
virtual double area() const = 0;
};
class Rectangle : public Shape {
public:
Rectangle(double width, double height) : m_width(width), m_height(height) {}
double area() const override { return m_width * m_height; }
private:
double m_width;
double m_height;
};
class Circle : public Shape {
public:
Circle(double radius) : m_radius(radius) {}
double area() const override { return M_PI * m_radius * m_radius; }
private:
double m_radius;
};
int main() {
// 创建形状的父类指针
Shape* shape;
// 创建矩形对象并将其分配给父类指针
shape = new Rectangle(5, 10);
cout << "矩形面积:" << shape->area() << endl;
// 创建圆形对象并将其分配给父类指针
shape = new Circle(3);
cout << "圆形面积:" << shape->area() << endl;
return 0;
}以上就是C++ 虚拟函数与虚继承:揭示多重继承中的复杂性的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号