#include <iostream>
using namespace std;
class AA{
public:
virtual void Show() = 0;
virtual void Draw() = 0;
};
class BB : public AA{
public:
virtual void Show(){
cout<<\"BB show!!\"<<endl;
}
virtual void Draw(){
cout<<\"BB Draw!!\"<<endl;
}
};
class CC : public BB{
public:
virtual void Show(){
cout<<\"CC Show!!\"<<endl;
}
virtual void Draw(){
cout<<\"CC Draw!!\"<<endl;
}
};
int main()
{
AA* b = new BB;
AA* c = new CC;
b->Draw();
c->Draw();
b->Show();
c->Show();
delete b;
delete c;
}
//결과
//BB Draw!!
//CC Draw!!
//BB Show!!
//CC Show!!
이해안가면 대갈통 뽀갤랑께!!
우왕ㅋ굳 열심히 볼게 횽
show랑 draw가 저렇게 되는 이유는 a나b나 다 같은 원리인거 맞지?
베이스드클래스는 그를 상속하는 모든 객체의 주소를 가질수 있다!! 가 뽀인트지
그럼 저렇게 했을때 상속받은 클래스가 베이스 클래스가 가지고 있지 않은 메서드를 가지고 있을때는?
프로토스가 질럿을 상속하고 질럿이 칼을 상속하고 칼이 순수 가상클래스를 상속하는 설계가 있다고 치자
그럼 순수 가상클래스로 동적할당하는 타입에 따라 자신을 상속하는 모든 객체를 생성해낼수 있단 소리지 그게 다형성이고
순수가상클래스 A = new 프로토스; 이렇게 생성을 하면 칼과 질럿을 동시게 가지는 프로토스라는 타입이 생겨나는거고
순수가상 클래스 A = new 질럿; 이렇게 생성을 하면 칼을 가지는 질럿이라는 타입이 생겨나는거고
훔 글쿠나 횽 떙스
베이스드 클래스는 넉터형이 말한거 때문에 UI형식으로 모든기능을 가상함수로 선언하는 방법을 마니 쓰지
그럼 질럿 A = new 프로토스 이렇게 해놓으면 컴파일 에러?
에이 아니당 이거는 혼자 공부해볼래 감사했어 횽
A가 B다가 형성되야댈꺼같은데..
컴파일 에러는 아니지만 오버라이딩시킬 가상함수선언이 없을테니 기능을 못쓰겠지?? 별도로 질럿에서도 프로토스에 대한 가상함수가 선언이 되어 있다 하면 가능하지만... 가상함수가 있는 클래스는 객체가 아니다 라는 말도 쓰니까 가상함수는 순수가상클래스로 따로 정의하는게 기본적인 지향방법이지
질럿이 프로토스다는 옳지만 프로토스가 질럿이라는 말은 옳지않으니까..
B는 A이다 가 형성이 되는게 맞는거지 -_-
AA A(이다) = new BB(는); 요거지
횽 그게아니라 기본개념은 A가 B다 라구..저기서말구..
ㅇㅅㅇ 상속은 개념은 is-A 이지
저기서 넉넉횽이말한 질럿a=new 프로토스는 A는 B이다가 성립하지않으니까..
is-A!!
헉 그러고보니 햏햏횽이 ...그분이었구나..방금 블로그들어가서알았음..
아~ 저건 내가 위에서 예를 잘못 들어놨엉 -_-;
-_- 명록이도 써놧드만 ㅋㅋㅋ
왜 이러냐? 가상함수가 하나라도 있는 클래스는 무조건 가상소멸자 적어주는 습관을 가져라.
ㄴㄴ 햏햏횽 그게아니라.. 난 후후쇼횽 MBTI인가 그거 검사하는데 가르쳐준다고해서 횽 블로그들어간거거든.. 전혀 형인줄은 모르고있엇어..
아항~ 난 알고 들어온줄 ㄷㄷ;; -_-;;
ㄷㄷ 이제알았따능 ㅋㅋㅋㅋㅋㅋㅋ횽이었다는걸 ㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ