Rumah > pembangunan bahagian belakang > C++ > Pengaturcaraan berorientasikan objek di C? Melaksanakan antara muka dari awal

Pengaturcaraan berorientasikan objek di C? Melaksanakan antara muka dari awal

Robert Michael Kim
Lepaskan: 2025-03-03 17:47:45
asal
476 orang telah melayarinya

C Pengaturcaraan Berorientasikan Objek: Melaksanakan antara muka dari awal

C tidak mempunyai antara muka dengan cara yang sama Java atau C# lakukan. Java dan C# mempunyai kata kunci yang jelas interface yang menentukan kontrak yang menentukan tandatangan kaedah tanpa menyediakan pelaksanaan. C mencapai fungsi yang sama, tetapi melalui mekanisme yang berbeza: kelas abstrak . Kelas abstrak mengisytiharkan sekurang -kurangnya satu fungsi maya murni (fungsi yang diisytiharkan dengan = 0). Fungsi maya murni tidak mempunyai definisi dalam kelas abstrak; Ia hanya menentukan tandatangan fungsi. Mana -mana kelas yang diwarisi dari kelas abstrak mestilah menyediakan pelaksanaan untuk semua fungsi maya murni, jika tidak, ia tetap abstrak dan tidak dapat diterapkan. Ini berkesan menguatkuasakan kontrak yang ditakrifkan oleh kelas abstrak, mencerminkan tingkah laku antara muka dalam Java atau C#. dan

adalah kelas konkrit yang melaksanakan antara muka

dengan menyediakan pelaksanaan untuk

dan
class Shape {
public:
  virtual double getArea() = 0; // Pure virtual function - makes Shape abstract
  virtual void draw() = 0;     // Another pure virtual function
};

class Circle : public Shape {
public:
  Circle(double radius) : radius_(radius) {}
  double getArea() override { return 3.14159 * radius_ * radius_; }
  void draw() override { /* Implementation to draw a circle */ }
private:
  double radius_;
};

class Rectangle : public Shape {
public:
  Rectangle(double width, double height) : width_(width), height_(height) {}
  double getArea() override { return width_ * height_; }
  void draw() override { /* Implementation to draw a rectangle */ }
private:
  double width_;
  double height_;
};
Salin selepas log masuk
Salin selepas log masuk
. Java dan C# Gunakan kata kunci

eksplisit, yang membolehkan kelas melaksanakan pelbagai antara muka secara bebas. C menggunakan kelas abstrak, dan kelas hanya boleh mewarisi dari satu kelas asas secara langsung (walaupun banyak warisan mungkin melalui warisan maya, yang menambah kerumitan). Ini bermakna bahawa pencapaian bersamaan dengan pelbagai antara muka dalam C memerlukan pendekatan yang berbeza, selalunya melibatkan pelbagai warisan atau komposisi. Ini memberikan lebih banyak fleksibiliti dalam C, tetapi ia juga boleh membawa kepada pemisahan antara muka dan pelaksanaan yang kurang jelas. Shape Circle Akhirnya, penguatkuasaan adalah berbeza. Java dan C# menguatkuasakan pelaksanaan antara muka pada masa penyusunan. C menguatkuasakannya terutamanya pada masa penyusunan, tetapi ralat runtime boleh berlaku jika kelas yang diperolehi tidak betul melaksanakan semua fungsi maya yang tulen (yang membawa kepada tingkah laku yang tidak ditentukan). Dalam C, ia dicapai melalui fungsi maya dan petunjuk/rujukan kepada kelas asas. Apabila menggunakan kelas abstrak sebagai antara muka, polimorfisme membolehkan anda merawat objek kelas yang berbeza secara seragam melalui penunjuk atau rujukan ke kelas asas (kelas abstrak). Rectangle

class Shape {
public:
  virtual double getArea() = 0; // Pure virtual function - makes Shape abstract
  virtual void draw() = 0;     // Another pure virtual function
};

class Circle : public Shape {
public:
  Circle(double radius) : radius_(radius) {}
  double getArea() override { return 3.14159 * radius_ * radius_; }
  void draw() override { /* Implementation to draw a circle */ }
private:
  double radius_;
};

class Rectangle : public Shape {
public:
  Rectangle(double width, double height) : width_(width), height_(height) {}
  double getArea() override { return width_ * height_; }
  void draw() override { /* Implementation to draw a rectangle */ }
private:
  double width_;
  double height_;
};
Salin selepas log masuk
Salin selepas log masuk

Kod ini menunjukkan polimorfisme. Walaupun shape1 dan shape2 adalah petunjuk kepada Shape, fungsi getArea() yang betul (sama ada dari Circle atau Rectangle) dipanggil pada runtime kerana penghantaran fungsi maya. Ini adalah penting untuk kod yang fleksibel dan boleh dipelihara. Berikut adalah dua contoh:

1. Corak Strategi:

Corak ini mentakrifkan keluarga algoritma, merangkumi setiap satu sebagai objek, dan menjadikannya boleh ditukar ganti. Kelas abstrak mentakrifkan antara muka untuk algoritma ini, dan kelas konkrit melaksanakan algoritma tertentu. Corak Kilang:

Corak ini mentakrifkan antara muka untuk membuat objek, tetapi membolehkan subkelas menentukan kelas mana yang hendak ditandakan. Kelas abstrak (atau kadang -kadang berganda) mentakrifkan antara muka untuk membuat objek, dan kilang -kilang konkrit melaksanakan penciptaan jenis objek tertentu.

Atas ialah kandungan terperinci Pengaturcaraan berorientasikan objek di C? Melaksanakan antara muka dari awal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan