Fungsi maya: Benarkan kelas terbitan mengatasi fungsi dalam kelas asas. Apabila penunjuk kelas asas menunjuk kepada objek kelas terbitan, fungsi maya kelas terbitan dipanggil. Warisan maya: Selesaikan masalah warisan berlian dalam berbilang warisan. Pastikan hanya satu contoh bagi setiap kelas asas wujud dalam kelas terbitan.
Fungsi maya ialah jenis fungsi ahli khas dalam C++ yang membenarkan kelas terbitan mengatasi fungsi dalam kelas asas. Apabila penunjuk kelas asas atau rujukan menunjuk kepada objek kelas terbitan, fungsi maya kelas terbitan akan dipanggil.
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; };
Pewarisan maya ialah teknik yang digunakan untuk menyelesaikan masalah pewarisan berlian yang berlaku dalam pewarisan berbilang (juga dikenali sebagai kekaburan pewarisan berbilang).
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; } };
Warisan maya memastikan hanya satu contoh wujud dalam setiap kelas asas (Animal
)在派生类(SiberianHusky
), dengan itu mengelakkan masalah warisan berlian.
#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; }
Atas ialah kandungan terperinci Fungsi Maya C++ dan Warisan Maya: Mendedahkan Kerumitan Warisan Berbilang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!