Kaedah pelaksanaan dan contoh pelbagai warisan dalam C++

PHPz
Lepaskan: 2023-08-22 09:27:36
asal
1380 orang telah melayarinya

1. Pengenalan kepada berbilang warisan dalam C++

Dalam C++, berbilang warisan ialah ciri yang boleh diwarisi oleh satu kelas daripada berbilang kelas. Kaedah ini boleh menggabungkan ciri dan tingkah laku kelas yang berbeza ke dalam satu kelas, dengan itu mencipta kelas baharu dengan fungsi yang lebih fleksibel dan kompleks.

Kaedah warisan berbilang C++ berbeza daripada bahasa pengaturcaraan berorientasikan objek lain seperti Java dan C# C++ membenarkan satu kelas mewarisi berbilang kelas pada masa yang sama, manakala Java dan C# hanya boleh melaksanakan warisan tunggal. Tepat kerana warisan berbilang mempunyai keupayaan pengaturcaraan yang lebih berkuasa, warisan berbilang telah digunakan secara meluas dalam pengaturcaraan C++.

2. Cara melaksanakan pewarisan berbilang dalam C++

Pewarisan berbilang dalam C++ dilaksanakan dengan memasukkan berbilang kelas asas dalam definisi kelas. Dalam proses pelaksanaan khusus, kita boleh melaksanakan warisan berbilang dalam dua cara berikut:

1. Kaedah warisan maya

Dalam C++, warisan maya ialah cara untuk menetapkan kelas asas sebagai kelas asas maya. Kelas asas warisan maya tidak akan mengalami masalah warisan berbilang apabila kelas terbitan mewarisi, dan mengelakkan masalah ahli yang sama muncul dalam berbilang kelas asas.

2. Kaedah pewarisan terus

Selain pewarisan maya, pewarisan berbilang dalam C++ juga boleh menggunakan pewarisan langsung. Berbanding dengan warisan maya, kaedah ini tidak memerlukan kelas asas maya untuk diwarisi secara langsung oleh kelas terbitan, yang agak mudah.

3. Contoh pewarisan berbilang dalam C++

Dalam contoh berikut, kami akan melaksanakan pewarisan berbilang melalui pewarisan langsung.

Tentukan tiga kelas asas: Bentuk, Bulatan dan Segitiga, dengan Bentuk sebagai kelas asas dan Bulatan dan Segitiga mewarisi daripada Bentuk.

class Shape {
public:
  virtual double getArea() {
    return 0;
  }
};

class Circle : public Shape {
public:
  Circle(double r) {
    radius = r;
  }
  double getArea() {
    return 3.14 * radius * radius;
  }
private:
  double radius;
};

class Triangle : public Shape {
public:
  Triangle(double a, double b, double c) {
    sideA = a;
    sideB = b;
    sideC = c;
  }
  double getArea() {
    double p = (sideA + sideB + sideC) / 2;
    return sqrt(p * (p - sideA) * (p - sideB) * (p - sideC));
  }
private:
  double sideA;
  double sideB;
  double sideC;
};
Salin selepas log masuk

Seterusnya, kami akan mentakrifkan Graf kelas terbitan dan mewarisi kedua-dua kelas Bulatan dan Segitiga, dengan itu mencapai berbilang warisan.

class Graph : public Circle, public Triangle {
public:
  Graph(double r, double a, double b, double c) : Circle(r), Triangle(a, b, c) {}
  double getArea() {
    return Circle::getArea() + Triangle::getArea();
  }
};
Salin selepas log masuk

Dalam kod di atas, kami mewarisi kedua-dua kelas Bulatan dan Segitiga melalui pewarisan langsung, dan melebihkan kaedah getArea() Dengan memanggil kaedah getArea() kelas Bulatan dan Segitiga, akhirnya kami mengira Cari jumlah luas graf tersebut.

Akhir sekali, kita boleh menjalankan ujian berikut:

int main() {
  Circle c(5);
  cout << "圆的面积: " << c.getArea() << endl;

  Triangle t(3, 4, 5);
  cout << "三角形的面积: " << t.getArea() << endl;

  Graph g(5, 3, 4, 5);
  cout << "圆和三角形的总面积: " << g.getArea() << endl;

  return 0;
}
Salin selepas log masuk

Melalui ujian di atas, kita dapat melihat bahawa melalui pewarisan berbilang, kita bukan sahaja boleh mencapai kelas dengan ciri berbilang kelas pada masa yang sama, tetapi juga mencipta ciptaan oleh menggabungkan ciri-ciri yang berbeza Cipta kelas baharu yang lebih fleksibel dan kompleks.

Ringkasan

Di atas adalah pengenalan kepada kaedah pelaksanaan dan contoh pewarisan berbilang C++. Dalam pengaturcaraan sebenar, walaupun warisan berbilang boleh membawa keupayaan pengaturcaraan yang lebih fleksibel dan berkuasa, ia juga memerlukan kita untuk mengekalkan berhati-hati dan pemikiran yang jelas untuk mengelakkan konflik antara kelas.

Atas ialah kandungan terperinci Kaedah pelaksanaan dan contoh pelbagai warisan dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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