키워드가 있습니다. C는 비슷한 기능을 달성하지만 다른 메커니즘을 통해 interface
추상 클래스 . 추상 클래스는 하나 이상의 순수한 가상 함수 (로 선언 된 함수)를 선언합니다. 순수한 가상 함수는 추상 클래스 내에서 정의가 없습니다. 함수의 서명 만 지정합니다. 추상 클래스에서 물려받는 클래스는
가 인터페이스로 작용합니다.
및<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>는 및 에 대한 구현을 제공함으로써 인터페이스를 구현하는 콘크리트 클래스입니다. 인터페이스 구현의 주요 차이점 : c vs. java/c
Shape
주요 차이점은 사용 된 메커니즘에 있습니다. Java 및 C# 명시 적 Circle
키워드를 사용하여 클래스가 여러 인터페이스를 독립적으로 구현할 수 있습니다. C는 추상 클래스를 사용하고 클래스는 한 기본 클래스에서 직접 상속 될 수 있습니다 (가상 상속을 통해 다중 상속이 가능하지만 복잡성을 더합니다). 이는 C에서 다중 인터페이스를 달성하는 데 다른 접근법을 달성하는 데 다른 접근법이 필요하다는 것을 의미합니다. 종종 여러 상속 또는 구성이 포함됩니다. Rectangle
Shape
또 다른 차이점은 Java와 C# 인터페이스에 메소드 서명 (및 상수) 만 포함 할 수 있고 C 초록 클래스는 회원 변수와 비 퍼어 가상 함수 (구현과 함께)를 포함 할 수 있다는 것입니다. 이것은 C에서 더 많은 유연성을 제공하지만 인터페이스와 구현을 명확하게 분리 할 수 있습니다. getArea()
마지막으로 집행은 다릅니다. Compile Time에서 Java 및 C# Enforce 인터페이스 구현. C는 주로 컴파일 시간에 시행되지만, 파생 클래스가 모든 순수한 가상 함수 (정의되지 않은 동작으로 이어지는)를 올바르게 구현하지 않으면 런타임 오류가 발생할 수 있습니다. draw()
C
<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>는 에 대한 포인터이지만, 가상 함수 디스패치로 인해 런타임에서 올바른 (
shape1
또는 )가 호출됩니다. 이는 유연하고 유지 관리 가능한 코드에 중요합니다. shape2
일반적인 설계 패턴은 C Shape
의 인터페이스를 활용하는 일반적인 설계 패턴이 인터페이스의 개념에 크게 의존합니다 (C의 추상 클래스로 표시). 두 가지 예는 다음과 같습니다. 전략 패턴 : getArea()
이 패턴은 알고리즘 패밀리를 정의하고 각각을 객체로 캡슐화하여 서로 바꿀 수있게 만듭니다. 초록 클래스는 이러한 알고리즘의 인터페이스를 정의하고 구체적인 클래스는 특정 알고리즘을 구현합니다. 공장 패턴 : 이 패턴은 객체를 만드는 인터페이스를 정의하지만 서브 클래스는 어떤 클래스를 인스턴스화할지 결정할 수 있습니다. 추상 클래스 (또는 때로는 다중)는 객체 생성을위한 인터페이스를 정의하고 콘크리트 공장은 특정 객체 유형의 생성을 구현합니다. Circle
Rectangle
이 예제는 C의 추상 클래스가 인터페이스의 목적을 효과적으로 사용하여 유연성, 유지 가능성 및 확장을 촉진하는 강력한 설계 패턴을 가능하게하는 방법을 보여줍니다.위 내용은 C의 객체 지향 프로그래밍? 처음부터 인터페이스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!