> 백엔드 개발 > C++ > 함수 재작성 원리 공개: 하위 클래스가 상위 클래스의 동작을 제어하는 ​​방법

함수 재작성 원리 공개: 하위 클래스가 상위 클래스의 동작을 제어하는 ​​방법

WBOY
풀어 주다: 2024-05-04 09:06:02
원래의
1028명이 탐색했습니다.

질문: 함수 재작성 원리는 무엇인가요? 답변: 함수 재정의를 사용하면 동일한 이름의 메서드를 선언하고 override 키워드를 사용하여 부모 클래스에서 상속된 메서드를 재정의함으로써 하위 클래스가 부모 클래스 동작을 제어할 수 있습니다. 단계: 서브클래스 생성자에서 가상 메서드를 선언하고 이를 virtual 키워드로 표시합니다. 상위 클래스 메서드와 동일한 메서드의 반환 값 유형, 이름, 매개변수 목록을 지정합니다. 메서드를 재정의로 명시적으로 선언하려면 override 키워드를 사용하세요.

함수 재작성 원리 공개: 하위 클래스가 상위 클래스의 동작을 제어하는 ​​방법

함수 재정의 원리 공개: 하위 클래스가 상위 클래스의 동작을 제어하는 ​​방법

재정의는 객체 지향 프로그래밍에서 중요한 개념으로, 하위 클래스가 상위 클래스에서 상속된 메서드를 재정의할 수 있습니다. 재정의를 통해 하위 클래스는 기본 클래스 코드와의 호환성을 유지하면서 상위 클래스의 동작을 사용자 정의할 수 있습니다.

재정의 이해

재정의는 하위 클래스의 생성자에서 다음 형식으로 선언됩니다.

virtual <return type> <function name>(<parameter list>) override;
로그인 후 복사
  • virtual 키워드는 하위 클래스가 메서드를 재정의할 수 있음을 나타냅니다. virtual 关键字表示该方法可以被子类重写。
  • <return type> 指定方法的返回值类型。
  • <function name> 是被重写的方法名称。
  • <parameter list> 是方法的参数列表。
  • override 关键字明确声明该方法是对父类方法的重写。

实战案例

为了说明函数重写,我们创建一个带有 draw() 方法的 Shape 基类和一个名为 Circle 的子类:

class Shape {
public:
    virtual void draw() { cout << "Drawing Shape" << endl; }
};

class Circle : public Shape {
public:
    void draw() override { cout << "Drawing Circle" << endl; }
};
로그인 후 복사

Shape 类的 draw() 方法被声明为 virtual,这意味着它可以被 Circle 类重写。在 Circle 类中,draw() 方法被重新定义,打印出 "Drawing Circle"。

重写工作原理

当子类对象调用 draw() 方法时,编译器会动态选择与该对象关联的适当实现。如果对象是一个 Circle 实例,则会调用重写后的 Circle::draw() 方法。否则,它将调用基类的 Shape::draw() 方法。

优点

函数重写提供了以下优点:

  • 允许子类根据需要定制其父类行为。
  • 维护代码的可扩展性和可重用性。
  • 促进代码重构,无需修改基类。

注意事项

重写时应遵循以下注意事项:

  • 方法签名(返回类型和参数列表)必须与父类方法相同。
  • 重写的方法不能比其父类方法的访问权限级别更严格。
  • 重写的方法通常使用 override
  • <return type> 메소드의 반환 값 유형을 지정합니다.
🎜은 재정의된 메서드의 이름입니다. 🎜🎜은 메소드의 매개변수 목록입니다. 🎜🎜override 키워드는 해당 메서드가 상위 클래스 메서드의 재정의임을 명시적으로 선언합니다. 🎜🎜🎜🎜실용 사례🎜🎜🎜함수 재작성을 설명하기 위해 draw() 메서드와 Circle Subclasses of라는 클래스를 사용하여 <code>Shape 기본 클래스를 생성합니다. : 🎜rrreee🎜 Shape 클래스의 draw() 메서드는 virtual로 선언됩니다. 즉, >원 클래스 재정의. Circle 클래스에서 draw() 메서드는 "원 그리기"를 인쇄하도록 재정의되었습니다. 🎜🎜🎜재정의 작동 방식🎜🎜🎜하위 클래스 객체가 draw() 메서드를 호출하면 컴파일러는 객체와 연결된 적절한 구현을 동적으로 선택합니다. 객체가 Circle 인스턴스인 경우 재정의된 Circle::draw() 메서드가 호출됩니다. 그렇지 않으면 기본 클래스의 Shape::draw() 메서드를 호출합니다. 🎜🎜🎜 장점 🎜🎜🎜 함수 재정의는 다음과 같은 장점을 제공합니다. 🎜🎜🎜 하위 클래스가 필요에 따라 상위 클래스의 동작을 사용자 정의할 수 있습니다. 🎜🎜코드 확장성과 재사용성을 유지하세요. 🎜🎜기본 클래스를 수정하지 않고도 코드 리팩토링을 촉진합니다. 🎜🎜🎜🎜Notes🎜🎜🎜재정의 시 다음 사항을 고려해야 합니다. 🎜🎜🎜메서드 서명(반환 유형 및 매개변수 목록)은 상위 클래스 메서드와 동일해야 합니다. 🎜🎜재정의된 메서드는 상위 클래스 메서드보다 더 제한적인 액세스 수준을 가질 수 없습니다. 🎜🎜Overridden 메서드는 일반적으로 override 키워드를 사용하여 컴파일 시간 검사를 제공하고 우발적인 재정의를 방지합니다. 🎜🎜

위 내용은 함수 재작성 원리 공개: 하위 클래스가 상위 클래스의 동작을 제어하는 ​​방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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