객체 포인터 변수
◦ 객체의 주소 값을 저장하는 포인터 변수
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)라고 한다.
◦추상클래스는 완전하지 않은 클래스이므로 객체를 생성할수 없다. 추상클래스는 보통 기본이 되는 최상위클래스를 만들때 쓰인다.
다형성
◦ 객체지향의 중요한 요소중 하나이며 모습은 같은데 형태는 다르다 는 의미를 가진다. 다시 말해 '문장은 같은데 결과는 다르다'는 뜻이다.