◆ 객체포인터 변수란 ? 객체의 주소 값을 저장하는 포인터 변수 객체를 가리키고 있는 포인터 변수 Person * ptr = new Person(); ◆ 만약 student class 가 Person class 를 상속 받을 때 Person * ptr = new Student(); 가능 !!
4.
5.
6.
◆ 컴퓨터는실제 가리키고 있는 객체가 어떤 타입인지 신경 쓰지 않는다 . 실제 대입되는 클래스도 가리키는 포인터의 타입으로 인식한다 . 즉 , 가리키고 있는 포인터의 타입의 형태로 인식한다 . * 상속 관계에서 상위 클래스가 하위 클래스를 가리키는 경우는 100% 가능 Why? 상위 클래스에 있는 모든 변수와 함수를 상속받으니까 !
♦ 함수오버로딩 함수 이름은 같지만 전달하는 인자의 개수가 다르거나 타입을 다르게 선언 하여 기능을 여러 인자나 타입에 맞게 설계하는 방법 . ♦ 함수 오버 라이딩 상속 관계에서 상위 클래스의 함수를 하위 클래스 함수에서 재정의 하는 것 . 만약 상속 관계에 있을 때 부모 함수를 오버로딩 형식으로 인자를 다르게 주어서 정의한다면 부모 함수를 쓸 수 없다 .
12.
13.
만약 부모의 맴버함수가 여러 개로 오버로딩 되어 있을 때 자식 클래스에서 한가지를 오버 라이드 한다면 부모의 다른 오버로딩 된 함수는 상속되지 않는다 .
14.
상속의 이점 기존코드에 새로운 것을 추가하였을 때 , 기존에 있던 코드의 변형을 최소화 시킬 수 있다 . 같은 것끼리 묶어서 편하게 관리할 수 있다 . 중복되는 코드 내용을 줄일 수 있다 . 2. 부모 포인터가 자식 클래스를 가리키는 것을 어디다 사용 ? - 상속 관계에 있는 객체들을 상위 클래스가 가리킴으로써 다형성 을 구현할 수 있다 . ( 가상 함수를 통해서 완벽한 다형성 구현 )
▪ Draw() 에 virtual 을 붙여서 가상함수로 만들었더니 각 클래스에 맞는 Draw() 함수가 호출되었다 . ▪ 그러나 소멸자는 그대로다 .
26.
27.
28.
♦ 소멸자가상함수 상위 클래스만 virtual 로 선언해주면 상속 받은 클래스들이 소멸자도 virtual 소멸자로 선언이 된다 . 상위 클래스에서 사용될 것 같은 클래스의 생성자에서 동적으로 메모리를 할당할 경우 소멸자는 가상으로 선언해야 한다 . 앞에 virtual 을 붙여주면 이 맴버 함수의 주소는 컴파일시 결정 되는 것이 아니라 실행 시에 주소를 결정한다 . ( 남발 하는 건 좋지 않다 . )
29.
♦ 순수가상 함수 가상 함수의 한 종류이다 . ♦ 만드는 방법 virtual void Draw() const = 0; ♦ 의미 이 함수는 정의가 없으므로 호출도 불가능 자식 함수에서 이 함수를 오버라이딩 해서 쓸 것이다 . ( 다형성 이용해서 ) 한 개 이상의 순수 가상 함수를 포함하면 그 클래스는 추상 클래스가 된다 . 추상 클래스는 인스턴스 화가 불가능하다 .
♦ 다형성이란객체 지향 프로그래밍에서 다형성이란 타입에 관계 없이 동일한 방법 으로 다룰 수 있는 능력을 말한다 . Circle 이나 Rectangle 객체 들을 각각의 타입에 상관 없이 Shape 객체 인 것처럼 다룰 수 있는 능력이 다형성이다 .
33.
♦ 순수가상 함수 다형성을 위해서 함수의 원형만 필요한 경우라면 순수 가상 함수로 만든다 . 다형성은 가상 함수로도 구현이 가능하다 . ♦ 추상 클래스 하나 이상의 순수 가상 함수를 가지고 있는 클래스 . 인스턴스화가 불가능하다 . 이 클래스는 객체를 생성할 필요가 없고 인터페이스로서의 역할만 한다면 추상클래스로 선언
34.
♦ 동적바인딩 바인딩이란 함수를 호출하는 명령과 실제로 호출되는 함수를 짝지어 주는 일을 말한다 . 프로그램을 실행한 후에 어떤 함수를 호출할 수 있을지 알 수 있는 경 우를 동적 바인딩 또는 후기 바인딩 이라고 한다 . void Runc(Shape* pc) { pc->Draw(); } < 동적 바인딩 > Circle c; c.Draw(); < 정적 바인딩 >