Rumah >pembangunan bahagian belakang >C++ >Pengaturcaraan berorientasikan objek di C? 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
dengan menyediakan pelaksanaan untuk
dan<code class="cpp">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_; };</code>. 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
<code class="cpp">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_; };</code>
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:
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!