C++의 함수 재정의 [함수 오버로딩 대 예제를 통한 재정의]
게시 됨: 2021-05-25C++에서 함수 재정의는 부모 클래스에 이미 있는 자식 클래스의 함수를 사용할 수 있게 해주는 기능입니다. 자식 클래스는 모든 데이터 멤버와 부모 클래스에 있는 멤버 함수를 상속합니다. 자식 클래스의 기능을 재정의하려면 기능 재정의를 구현할 수 있습니다. 함수 재정의는 하위 클래스에서 상위 클래스 함수의 최신 버전을 만드는 것을 의미합니다.
목차
C++ 함수
C++ 함수는 작업을 수행하기 위해 함께 제공되는 명령문 그룹입니다. 모든 프로그램에는 최소한 main() 함수가 있으며 특정 프로그램에는 추가 기능이 있을 수 있습니다.
함수 선언은 함수 이름, 매개변수 및 반환 유형을 컴파일러에 전달합니다. 함수 정의는 함수 본문을 결정합니다. C++ 표준 라이브러리는 프로그램이 호출할 수 있는 많은 내장 함수로 구성됩니다. 함수는 메소드, 프로시저 또는 서브루틴이 될 수 있습니다.
함수 정의
C++ 함수의 일반 구문은 다음과 같습니다.
return_type function_name(매개변수 목록) {
기능체
}
모든 C++ 함수는 함수 헤더와 본문으로 구성됩니다. C++ 함수의 구성 요소는 다음과 같습니다.
반환 유형 – 반환 유형은 함수의 반환 값 유형을 나타냅니다.
함수 이름 - 함수 의 이름을 나타냅니다. 매개변수 목록과 함께 함수 이름은 함수 서명을 구성합니다.
매개변수 – 매개변수는 함수에서 반환된 값의 자리 표시자입니다. 함수가 호출되면 실제 매개변수라고 하는 매개변수에 값이 전달됩니다.
함수 본문 - 함수 본문은 함수가 수행할 작업을 정의하는 명령문의 목록을 구성합니다.
함수 호출
C++에서 함수를 사용하려면 함수를 호출하거나 호출해야 합니다. 제어가 함수로 전달되고 함수가 원하는 작업을 수행하고 return 문은 제어를 다시 주 프로그램으로 반환합니다.
함수를 호출하려면 함수 이름을 포함한 필수 매개변수를 전달해야 합니다. 함수가 값을 반환하면 값을 저장할 수 있습니다. 함수를 호출하는 동안 인수를 함수에 전달할 수 있는 몇 가지 방법이 있습니다. 호출 유형은 값에 의한 호출, 참조에 의한 호출 및 포인터에 의한 호출입니다.
C++에서 함수 재정의
파생 클래스 또는 자식 클래스가 기본 클래스 또는 부모 클래스에 이미 정의된 함수를 정의하는 경우 C++에서는 이를 함수 재정의라고 합니다. 함수 재정의는 런타임 다형성을 달성하는 데 도움이 됩니다. 이를 통해 프로그래머는 기본 클래스에서 이미 사용된 함수의 특정 구현을 수행할 수 있습니다.
예시:
원천
위에 주어진 예를 연구하십시오. 여기서 부모 클래스는 "Base"이고 자식 클래스는 "Derived"입니다.
위 프로그램의 출력은 다음과 같습니다.
파생 함수
함수 print()는 Base 및 Derived 클래스 모두에서 선언됩니다. Derived 클래스 객체인 "derived1"을 통해 함수 print()를 호출하면 기본 클래스의 동일한 함수를 재정의하여 Derived 클래스의 print()가 호출되고 실행됩니다.
기능 우선 원칙의 작동
원천
위 이미지에서 알 수 있듯이 Derived 클래스의 객체를 통해 동일한 함수를 호출했기 때문에 Base 클래스 함수가 재정의되었습니다.
Base 클래스의 객체를 통해 print() 함수를 호출하면 함수가 재정의되지 않습니다. 예:
//Base 클래스의 호출 함수
베이스 베이스1;
base1.print(); // 출력: 기본 함수
위 코드의 출력은 다음과 같습니다.
기본 기능
C++에서 재정의된 함수에 액세스하는 방법
재정의된 함수에 액세스하려면 범위 확인 연산자 "::"를 사용해야 합니다. 재정의된 함수에 액세스하는 또 다른 방법은 기본 클래스의 포인터를 사용하여 파생 클래스의 개체를 가리키고 포인터를 통해 함수를 호출하는 것입니다.
예시:
원천
위 프로그램의 출력은 다음과 같습니다.
파생 함수
기본 기능
재정의된 기능의 액세스 작업
원천
여기에서 파생된 1.print() 문은 Derived 클래스의 print() 함수에 액세스하고 파생된2.Base::print() 문은 Base 클래스의 print() 함수에 액세스합니다.
파생 클래스에서 C++ 재정의된 함수 호출
이 코드에서는 Derived 클래스 자체 내에서 재정의된 함수를 호출합니다.
Derived 클래스에서 재정의된 함수 호출 작업
원천
Base::print() 명령은 Derived 클래스 내부에서 재정의된 함수를 호출합니다.
세계 최고의 대학에서 온라인으로 소프트웨어 엔지니어링 과정을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
함수 오버로딩 대 함수 오버라이드
함수 오버로딩은 컴파일 타임에 이루어지며 기본 클래스와 파생 클래스에서 수행할 수 있습니다. 매개변수의 데이터 유형 또는 반환 유형과 같은 함수의 서명을 변경하여 함수의 다중 정의를 제공하는 데 도움이 됩니다.
함수 재정의는 런타임에 수행됩니다. 재정의에서 기본 클래스는 동일한 반환 유형 및 매개 변수를 사용하여 파생 클래스에서 재정의됩니다. C++에서 함수 재정의와 함수 오버로딩의 다른 차이점은 다음과 같습니다.
1. 상속
함수 재정의는 클래스 상속에서만 사용할 수 있지만 함수 오버로딩은 클래스 상속이 필요하지 않습니다.
2. 기능 서명
오버로드된 함수는 매개변수 수 또는 매개변수 유형에서 서명이 다릅니다. 함수 재정의에서 함수 서명은 동일하게 유지됩니다.
3. 기능 범위
오버라이드된 함수는 범위가 다르지만 오버로드된 함수는 동일한 범위를 갖습니다.
4. 기능 동작
파생 클래스 함수가 기본 클래스 함수와 다르게 또는 추가된 기능을 수행해야 하는 경우 함수 재정의가 필수적입니다. 함수 오버로딩은 이름이 같은 함수가 전달된 매개변수에 따라 다른 동작을 가져야 할 때 구현됩니다.
전체 스택 소프트웨어 개발에 대해 자세히 알아보려면 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 이그 제 큐 티브 PG 프로그램을 확인하십시오. 이 프로그램은 작업 전문가를 위해 설계되었으며 500 시간 이상의 엄격한 교육, 9 개 이상의 프로젝트, 및 과제, IIIT-B 동문 자격, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.
함수 재정의란 무엇입니까?
함수 재정의는 파생 클래스 내의 함수가 기본 클래스의 함수를 재정의할 수 있지만 서명이 다른(일반적으로 다른 구현으로) 개체 지향 프로그래밍의 개념입니다. 이것의 주요 측면은 파생 클래스가 기본 클래스에 대한 변경 사항을 "실행 취소"할 수 없거나 최소한 기본 클래스를 추가로 편집하지 않고는 불가능하다는 것입니다. 함수 재정의의 일반적인 용도는 기본 클래스에서 기본 구현을 제공한 다음 파생 클래스에서 특정 구현으로 재정의하는 것입니다.
함수 재정의와 오버로딩의 차이점은 무엇입니까?
함수 재정의는 기본 클래스에 이미 존재하는 함수와 동일한 이름으로 함수를 만들 때 발생합니다. 이 경우 새 기능이 기존 기능을 대체하고 원래 기능 대신 사용할 수 있습니다. 이름은 같지만 매개변수가 다른 함수를 만들 때 오버로딩이 발생합니다. 이 경우 원래 함수에 추가하여 새 함수가 호출되며 두 함수 모두 문제 없이 모든 컨텍스트에서 사용할 수 있습니다.