> 백엔드 개발 > C++ > C의 객체 지향 프로그래밍? 처음부터 인터페이스 구현

C의 객체 지향 프로그래밍? 처음부터 인터페이스 구현

Robert Michael Kim
풀어 주다: 2025-03-03 17:47:45
원래의
476명이 탐색했습니다.
C 객체 지향 프로그래밍 : 스크래치에서 인터페이스 구현

C에는 Java 또는 C# do와 같은 방식으로 인터페이스가 없습니다. Java 및 C#에는 구현을 제공하지 않고 계약을 지정하는 계약을 정의하는 명시 적

키워드가 있습니다. C는 비슷한 기능을 달성하지만 다른 메커니즘을 통해 interface 추상 클래스 . 추상 클래스는 하나 이상의 순수한 가상 함수 (로 선언 된 함수)를 선언합니다. 순수한 가상 함수는 추상 클래스 내에서 정의가 없습니다. 함수의 서명 만 지정합니다. 추상 클래스에서 물려받는 클래스는 모든 순수한 가상 함수에 대한 구현을 제공해야합니다. 그렇지 않으면 추상적이며 인스턴스화 할 수는 없습니다. 이것은 초록 클래스에 의해 정의 된 계약을 효과적으로 시행하여 Java 또는 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_;
};
로그인 후 복사
로그인 후 복사
는 <🎜 🎜> 및 <🎜 🎜>에 대한 구현을 제공함으로써 <🎜 🎜> 인터페이스를 구현하는 콘크리트 클래스입니다. 인터페이스 구현의 주요 차이점 : 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 <🎜 🎜>

다형성의 다형성을 효과적으로 활용하는 것은 대상의 능력을 여러 형태로 가져가는 능력입니다. C에서는 가상 함수와 기본 클래스에 대한 포인터/참조를 통해 달성됩니다. 추상 클래스를 인터페이스로 사용하는 경우 다형성은 포인터 또는 기본 클래스 (추상 클래스)에 대한 참조를 통해 다른 파생 클래스의 객체를 균일하게 처리 할 수 ​​있습니다.이 코드는 다형성을 보여줍니다.
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 일반적인 설계 패턴은 C Shape의 인터페이스를 활용하는 일반적인 설계 패턴이 인터페이스의 개념에 크게 의존합니다 (C의 추상 클래스로 표시). 두 가지 예는 다음과 같습니다. 전략 패턴 : getArea()이 패턴은 알고리즘 패밀리를 정의하고 각각을 객체로 캡슐화하여 서로 바꿀 수있게 만듭니다. 초록 클래스는 이러한 알고리즘의 인터페이스를 정의하고 구체적인 클래스는 특정 알고리즘을 구현합니다. 공장 패턴 : 이 패턴은 객체를 만드는 인터페이스를 정의하지만 서브 클래스는 어떤 클래스를 인스턴스화할지 결정할 수 있습니다. 추상 클래스 (또는 때로는 다중)는 객체 생성을위한 인터페이스를 정의하고 콘크리트 공장은 특정 객체 유형의 생성을 구현합니다. Circle Rectangle이 예제는 C의 추상 클래스가 인터페이스의 목적을 효과적으로 사용하여 유연성, 유지 가능성 및 확장을 촉진하는 강력한 설계 패턴을 가능하게하는 방법을 보여줍니다.

위 내용은 C의 객체 지향 프로그래밍? 처음부터 인터페이스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿