Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penulisan semula fungsi C++: meliputi kecacatan kelas induk dan mengoptimumkan struktur kod

Penulisan semula fungsi C++: meliputi kecacatan kelas induk dan mengoptimumkan struktur kod

王林
王林asal
2024-05-02 10:06:011053semak imbas

Penulisan semula fungsi membolehkan subkelas mengatasi fungsi kelas induk, dengan itu menyelesaikan kecacatan kelas induk dan mengoptimumkan struktur kod. Langkah-langkah khusus adalah seperti berikut: subkelas menulis semula fungsi dengan nama dan tandatangan kelas induk yang sama dan menyediakan pelaksanaannya sendiri. Subkelas boleh membetulkan kecacatan atau ralat reka bentuk dalam kelas induk. Fungsi penulisan semula boleh meningkatkan kebolehselenggaraan dan kebolehbacaan kod anda.

C++ 函数重写:覆盖父类缺陷,优化代码结构

C++ Fungsi Penulisan Semula: Tutupi kecacatan kelas induk dan optimumkan struktur kod

Fungsi Penulisan SemulaMembenarkan subkelas melaksanakan semula fungsi dengan nama dan tandatangan kelas yang sama dalam kelas induk. Ini memberikan faedah berikut:

  • Melindungi Kecacatan Kelas Ibu Bapa: Subkelas boleh membetulkan kecacatan atau kesilapan reka bentuk dalam kelas induk.
  • Optimumkan struktur kod: Fungsi penulisan semula boleh meningkatkan kebolehselenggaraan dan kebolehbacaan kod.

Syntax

Sintaks untuk mengatasi fungsi kelas induk dalam subkelas adalah seperti berikut:

returnType ChildClass::functionName(argumentList) {
  // 重写后的函数体
}

Antaranya:

  • returnType. overrid fungsi: returnType:重写函数的返回类型。
  • ChildClass:派生类名称。
  • functionName:要重写的函数名称。
  • argumentList:重写函数的参数列表。

实战案例:几何形状基类

考虑一个几何形状基类,它定义一个area虚拟函数来计算形状的面积:

class Shape {
public:
  virtual double area() const = 0;
};

我们创建派生类SquareCircle,分别为正方形和圆形:

class Square : public Shape {
public:
  Square(double sideLength) : sideLength(sideLength) {}
  double area() const override { return sideLength * sideLength; }
private:
  double sideLength;
};

class Circle : public Shape {
public:
  Circle(double radius) : radius(radius) {}
  double area() const override { return M_PI * radius * radius; }
private:
  double radius;
};

覆盖父类缺陷

Shape基类的area函数是抽象的,因为它没有具体实现。子类必须提供自己的实现。但是,对于像Circle这样的圆形,父类的area函数是错误的,因为它不考虑圆周率π。

通过重写Circle类的area函数,我们可以覆盖父类缺陷并提供正确的面积计算:

class Circle : public Shape {
public:
  Circle(double radius) : radius(radius) {}
  double area() const override { return M_PI * radius * radius; }
private:
  double radius;
};

优化代码结构

考虑另一个具有以下方法的Vector类:

class Vector {
public:
  void add(int x) { value += x; }
  void subtract(int x) { value -= x; }
};

我们可以通过重写加法运算符,

ChildClass: Nama kelas terbitan.

functionName: Nama fungsi yang akan ditulis semula.

argumentList: Tulis semula senarai parameter fungsi.

Kes Praktikal: Kelas Asas Bentuk Geometri 🎜🎜🎜Pertimbangkan kelas asas bentuk geometri yang mentakrifkan fungsi maya luas untuk mengira luas bentuk: 🎜
class Vector {
public:
  Vector& operator+=(int x) { value += x; return *this; }
  Vector& operator-=(int x) { value -= x; return *this; }

private:
  int value;
};
🎜Kami mencipta terbitan kelas Square dan Bulatan, masing-masing segi empat sama dan bulatan: 🎜
Vector v;
v += 10;  // 相当于 v.add(10)
v -= 5;   // 相当于 v.subtract(5)
🎜🎜mengatasi kecacatan kelas induk🎜🎜🎜Bentuk kelas asas kawasan code>Fungsi adalah abstrak kerana ia tidak mempunyai pelaksanaan konkrit. Subkelas mesti menyediakan pelaksanaannya sendiri. Walau bagaimanapun, untuk kalangan seperti Bulatan, fungsi kawasan kelas induk adalah salah kerana ia tidak mengambil kira pi. 🎜🎜Dengan mengatasi fungsi kawasan kelas Bulatan, kami boleh mengatasi kecacatan kelas induk dan menyediakan pengiraan kawasan yang betul: 🎜rrreee🎜🎜Optimumkan struktur kod🎜🎜🎜 Pertimbangkan kelas A Vector yang lain dengan kaedah berikut: 🎜rrreee🎜Kami boleh mereka bentuk semula kod ini dengan mengatasi operator penambahan , untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod Ciri-ciri: 🎜 rrreee🎜Pengendali mengatasi membolehkan kami mengendalikan vektor dengan sintaks yang lebih ringkas dan jelas: 🎜rrreee🎜🎜Kesimpulan🎜🎜🎜Peningkatan fungsi ialah mekanisme berkuasa dalam C++ yang membolehkan subkelas mengatasi Kecacatan kelas induk dan mengoptimumkan struktur kod. Dengan mempertimbangkan dengan teliti reka bentuk dan pelaksanaan fungsi yang diganti, kami boleh meningkatkan keteguhan, kebolehbacaan dan kebolehselenggaraan program kami. 🎜

Atas ialah kandungan terperinci Penulisan semula fungsi C++: meliputi kecacatan kelas induk dan mengoptimumkan struktur kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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