본문 바로가기

c++

C++ 프로그래밍 - 상속과 다형성




객체 포인터 변수
 객체의 주소 값을 저장하는 포인터 변수

1
2
Person * ptr // 포인터 변수 선언
ptr = new Person(); 포인터 변수의 객체 참조 
cs


 Person 형 포인터는 Person 형 객체 뿐만 아니라  Person을 상속하는 유도 클래스의 객체도 가리킬 수 있다 
         객체 포인터는 본래 객체뿐만 아니라   그 객체의 클래스를 상속하는 클래스 객체의 주소도 가리킬수 있다.


         

        ◦   객체 포인터의 참조 예시



             



슈퍼클래스 객체 포인터
 하위 서브클래스 객체주소를 모두 가리킬수 있음
서브 클래스 객체 포인터
 슈퍼클래스의 객체 포인터를 가리킬수 없음
선언된 포인터의 자료형을 기준으로 하며실제 가리키는 주소의 자료형은 고려하지 않음

  ex) Base *  bptr = new Derived() // 컴파일 ok

        Drived * dptr = bptr ; // 컴파일 error

  ex) Base * bptr = new Derived();

        bptr -> DerivedFunc();

   // 본래 자료형이 Base이므로 derived 클래스 함수에 접근 불가능



오버라이딩
상속 관계에 있는 함수들은 이름과 매개변수가 같아도 다른함수로 인식가능하다이를 오버라이딩 이라고 함
Sub Class의 함수 A를 호출하면 super Class 함수 A의 내용은 SubClass의 함수 A의 내용에 가려진다.
이름이 같은 함수가 있다고 해도 매개변수가 다르면 이는 함수 오버라이딩이 아닌 오버로딩 이다



 가상함수

◦ 가상함수는 객체 포인터의 변수의 자료형에 따라서 호출되는 함수가 달라지는 문제점 해결을 위해 쓰임
      ◦ 가상함수로 선언된 함수를 오버라이딩 하면 그 함수도 가상함수

 ◦ 가상함수로 선언된 함수는 객체 포이터변수의 자료형이 아닌 그 포인터가 가리키는 객체 자료형에 따라 함수가 호출



추상클래스

함수의 몸체가 없는 가상함수를 정의할수도 있는데 이를 순수 가상함수라고 하며 하나 이상의 순수 가상함수를 포함한 클래스를  추상클래스(abstrct class)라고 한다.  

추상클래스는 완전하지 않은 클래스이므로 객체를 생성할수 없다추상클래스는 보통 기본이 되는 최상위클래스를 만들때 쓰인다.

  

   




다형성 


◦ 객체지향의 중요한 요소중 하나이며 모습은 같은데 형태는 다르다 는 의미를 가진다다시 말해 '문장은 같은데 결과는 다르다'는 뜻이다.