※ 추상클래스
1. 가상함수를 하나 이상 가지고 있는 클래스
2. 오직 상속을 목적을 사용 (has~a관계일 때는 x -> 일반적으론 객체를 못만들기 떄문이다)
※ 동적바인딩
1. 부모의 포인터로 자식을 접근하는 방식
2. is~A 관계 일때만 사용가능
3. 정적바인딩과 같은 결과가 나와야한다. ( 중요! )
4. 부모가 인식할 수 있는 범위까지만 사용가능하다.
즉, 부모만 가지고 있는 경우 또는 오버라이딩한 멤버만 접근가능.
보모의 함수를 자식이 오버라이딩을 꼭 해야된다.!! 안하면 접근 X.
5. 장점은 부모가 자식을 접근을 할 때 어떤 자식으로도 접근할 수 있다.
=> 코드 간략!!
=> 다양하게 접근할 수 있다!! (다양성) - 궁극적인 목표
예제 소스)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> using namespace std; class A { public: virtual void disp(); // 함수 선언 , 동적바인딩을 위해 가상함수로 한다. void cccc() { cout << "A::cccc()" << endl; } }; class B :public A { public: virtual void disp(); // 오버라이딩 void dddd() { cout << "B::dddd()" << endl; } }; void B::disp() // 함수 정의 (A::를 통해서 명시해야지만 가능) { cout << "B::disp()" << endl; } void A::disp() // 함수 정의 (A::를 통해서 명시해야지만 가능) { cout << "A::disp()" << endl; } void output() // 외부 함수 { cout << "output()" << endl; } void main() { A *p; B bb; p = &bb; // 동적바인딩 bb.disp(); p->disp(); // 자기성질이 우선이라서 A::disp()가 호출된다. // java는 자동으로 해주지만 c++은 개발자가 직접 처리해야된다!! // 따라서 가상함수를 이용해야한다!! bb.dddd(); // p->dddd(); // error p->cccc(); /* output(); // 외부 함수 A aa; aa.disp(); B bb; bb.disp(); //bb.B::disp(); // 정석으로는 하지만 자신의 클래스이기때문에 우선순위가 있기때문에 생략가능!! bb.A::disp(); */ } | cs |
가상 함수 - virtual Function (0) | 2018.03.13 |
---|---|
다중 상속 시 모호성발생의 해결 방법(가상상속 처리) (0) | 2018.03.13 |
Has~a관계 이용한 데이터 관리클래스 (학생성적 C++) (0) | 2018.03.08 |
Class 관계 - Has ~ a 관계(C++) (0) | 2018.03.08 |
오버로딩(Overloading) (0) | 2018.03.06 |
댓글 영역