Rumah > pembangunan bahagian belakang > C++ > Fungsi Maya C++ dan Warisan Maya: Mendedahkan Kerumitan Warisan Berbilang

Fungsi Maya C++ dan Warisan Maya: Mendedahkan Kerumitan Warisan Berbilang

王林
Lepaskan: 2024-04-28 21:03:01
asal
486 orang telah melayarinya

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.

C++ 虚拟函数与虚继承:揭示多重继承中的复杂性

C++ Fungsi Maya dan Warisan Maya: Mendedahkan Kerumitan dalam Berbilang Warisan

Fungsi Maya

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;
};
Salin selepas log masuk

Pewarisan maya

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; }
};
Salin selepas log masuk

Warisan maya memastikan hanya satu contoh wujud dalam setiap kelas asas (Animal)在派生类(SiberianHusky), dengan itu mengelakkan masalah warisan berlian.

Kes praktikal

#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;
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan