面向對象的編程:從頭開始實現接口
c不會像Java或C#Do一樣具有接口。 Java和C#具有明確的>關鍵字,該關鍵字定義合同指定方法簽名而無需提供實現。 C實現了相似的功能,但是通過不同的機制:= 0
中界面的行為,例如:
在此示例中,
是接口。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_; };
是通過提供Shape
>和Circle
>的實現的具體類,可以實現Rectangle
>。 Java和C#使用顯式Shape
關鍵字,允許類獨立實現多個接口。 C使用抽像類,並且一個類只能直接從一個基類繼承(儘管通過虛擬繼承可以多個繼承,這增加了複雜性)。 這意味著在C中實現相當於多個接口的等效方法需要一種不同的方法,通常涉及多個繼承或組成。 getArea()
>draw()
>另一個區別是,Java和C#接口僅包含方法簽名(和常數),而C摘要類也可以包含成員變量和非pure虛擬功能(具有實現)。 這在C中提供了更大的靈活性,但它也可能導致接口和實現的分離較少。 Java和C#在編譯時執行接口實現。 C主要在編譯時強制執行,但是如果派生類未正確實現所有純虛擬函數(導致未定義的行為),可能會發生運行時錯誤。
>interface
>
>
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_; };
此代碼證明了多態性。 即使shape1
和shape2
是Shape
>的指示器,由於虛擬函數調度,在運行時調用了正確的getArea()
函數(來自Circle
或Rectangle
)。這對於靈活和可維護的代碼至關重要。
中利用界面的界面模式很大程度上依賴於接口的概念(由C中的抽像類表示)。 這裡有兩個示例:
1。策略模式:
Shape* shape1 = new Circle(5); Shape* shape2 = new Rectangle(4, 6); std::cout << "Circle Area: " << shape1->getArea() << std::endl; std::cout << "Rectangle Area: " << shape2->getArea() << std::endl; delete shape1; delete shape2;
2。工廠模式:
class SortingAlgorithm { public: virtual void sort(std::vector<int>& data) = 0; }; class BubbleSort : public SortingAlgorithm { public: void sort(std::vector<int>& data) override { /* Bubble sort implementation */ } }; class QuickSort : public SortingAlgorithm { public: void sort(std::vector<int>& data) override { /* Quick sort implementation */ } };
>
。以上是C 中的面向對象編程?從頭開始實現接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!