◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
아래 코드를 실행하여 함수 오버로딩과 함수 오버라이딩을 완벽하게 이해하고, 그 활용법에 대해서 파악한다.
/* ○ 함수 오버로딩(중첩) : 이름은 같지만 인자가 다른 함수를 다수 정의하여 하나의 함수로 다수의 함수를 이용할 수 있게 하는 것. ○ 함수 오버라이딩(재정의) : 클래스의 상속관계에서 부모클래스와 자식클래스에서 이름이 같은 함수를 작성하는 것. ==================================================================================================================== ○ 함수 오버라이딩(재정의) 상세설명. - 자식 클래스에서 부모 클래스의 함수 구현부를 새로이 만드는 것 - 함수의 이름만 같으면 오버라이딩이 된다. ○ 부모 클래스의 하나의 함수를 재정의하면 동일한 이름을 가진 부모 클래스의 모든 함수(오버로딩된 모든 함수)를 은폐 시키게 됨 ○ 부모 클래스의 함수가 재정의 되어 은폐되었더라도 함수의 호출 경로를 완전하게 써주면 호출할 수 있음(예,자식클래스의객체명.부모클래스명::함수명();) */ #includeusing namespace std; class Mammal { public: void Move() const { cout << "Mammal move one step\n"; } void Move(int distance) const { cout << "Mammal move " << distance; cout << " steps.\n"; } }; class Dog : public Mammal { public: void Move() const { cout << "Dog move...\n"; } void Run() const { for(int i=0; i < 5; i++) { //Move(); // 자기 자신의 Move()함수를 사용하고자 할 경우, Mammal::Move(); // 부모의 Move()함수를 사용하고자 할 경우, } } }; void main() { Mammal bigAnimal; bigAnimal.Move( ); bigAnimal.Move(2); Dog fido; fido.Move( ); //fido.Move(6); // 에러발생 : 오버라이딩한 경우, 부모의 모든 Move()함수에 접근 불가능하다. fido.Mammal::Move(6); // 함수의 호출경로를 완전하게 적어서 은폐된 함수를 호출한다. }