class ank : public ld
{
}
이렇게 되있어서
ld 타고 들어가니까
class ld : public vi, public st
{
}
이렇게 또 선언해놨더라구요.
ank에 대해서 ld의 의미
ld에 대해서 vi,st의 의미
어떻게 보면 이해될까요?
콜론연산자를 이해하기가 힘드네요.
class ank : public ld
{
}
이렇게 되있어서
ld 타고 들어가니까
class ld : public vi, public st
{
}
이렇게 또 선언해놨더라구요.
ank에 대해서 ld의 의미
ld에 대해서 vi,st의 의미
어떻게 보면 이해될까요?
콜론연산자를 이해하기가 힘드네요.
콜론 연산자가 아니고 c++ 상속 아님?
ank -> ld -> vi, st . A -> B 에서 A 가 자식이고 B 가 부모, ld 는 vi, st 를 다중상속한거고. 이게 다임.
Class Diagram 으로 그리면 ld 에서 부모로 가는 선이 2개 나가고 각각 vi, st 로 가겠지.
: 상속한다라는게 지금 선언할 클래스의 부모를 선언해준다는거죠? 자식은 부모의 변수같은걸 쓸 수 있고?
그건 : 다음에 뭘 적어주냐에 따라서 좀 바뀜. 니가 예를 들어 보인거는 다 public 이니까 가장 제약이 약한거지. protected, private 에서는 좀 달라지고, 자식 클래스는 부모 클래스인 것 처럼 쓰일 수 있음. 예를 들면 ank aaa; ld *bbb = &aaa; 하고 bbb 로 조지는게 돼. 이런걸 Polymorphism 이라고 하지. 근데 ank 의 부모인 ld 가 애초에 vi, st 를 상속했으므로, vi *ccc = &aaa; st *ddd = &aaa; 도 된다.
이거의 단적인 예는, 니가 기본 string 이 거지같아서 이걸 상속해서 my_string 같은 걸 만들었어도 기존에 string 을 파라미터로 받는 모든 함수에 my_string 을 Polymorphism 때문에 문제없이 전달해서 쓸 수 있다 정도가 있음.
프로그래밍에서 polymorphism이라는 성질은 위에 ㅇㅇ가 적은 것보다 더 일반적인 단어임. poly(많은) morph(형태) -ism 인데 하나의 타입(클래스)가 여러가지 형태를 동시에 가질 수 있다는 성질을 뜻함.
C++에서는 polymorphism을 구현하는 방식으로 subtyping polymorphism을 선택함. subtyping은 말 그대로 어떤 타입이 있으면 그 타입의 서브한 존재, 즉 자식 클래스를 만들어낼 수 있다는 의미인데 class ank : public id라고 선언하면 ank라는 타입이 id라는 타입의 서브타입임을 정의하는 거지. 집합론을 배웠으면 부분집합으로 생각하면됨. ank라는 집합은 id라는 집합에 완전히 속한 부분집합임.
그러니까 ank는 ank이면서 동시에 id이기도 한 polymorph한 타입이겠지. 폴리몰피즘을 구현하는 방식은 서브타이핑 말고도 파라메트릭, 애드혹 폴리몰피즘같은게 있음. Parametric은 하스켈같은 언어가 제대로 구현해놨음. C++의 템플릿이 비슷한 방식인데 얘는 중간에 monomorphization단계를 거쳐서 사실 이상적인 파라메트릭 폴리몰피즘은 아니지
ㄳㄳ 상속과 다형성에 대해서 검색해서 찾아봤는데 해준말들 이해가 좀 가는거 같음
부모의 재활용성을 위해서 자식을 추가하는거네
혹은 자식만가지고도 작업할수도 있고
이해하고 보니까 클래스 연결 구성 복잡도가 제 상상을 초월하는군ㅇ
요