case 1
class mom{
public : int a = 1;
};
class dad{
public : int a= 2;
};
class child : public mom, public dad
{
public : int c = 1;
};
int main()
{
child ch;
std::cout << ch.Mom::a << endl; print 1
std::cout << ch.Dad::a << endl; pinrt 2
std::cout << ch.c << endl; pinrt 3
}
case 2
class person{
public : int a;
};
class mom : public person{
public : mom(){a = 1;}
};
class dad : public person{
public : dad{a = 2;}
};
class child : public mom, public dad
{
public : int c = 3;
}
int main()
{
child ch;
std::cout << ch.Mom::a << endl; print 1
std::cout << ch.Dad::a << endl; pinrt 2
std::cout << ch.c << endl; pinrt 3
case 3
class person{
public : int age;
void eat(){std::cout << "eating" << endl;}
};
class student : public person{
public :
void study(){std::cout << "studying" << endl;}
};
class worker : public person{
public :
void work(){std::cout << "work" << endl;}
};
class Researcher : public student, public worker
{
}
int main()
{
Researcher re;
re.student::age = 10;
re.wordker::age = 20; // >> 문법적으로 이상함
re.age = 30 // >> 불가능
다이아몬드 문제 발생!!
-> 해결방법 : 가상상속
class student : [virtural] public person{
public :
void study(){std::cout << "studying" << endl;}
};
class worker : [virtual] public person{
public :
void work(){std::cout << "work" << endl;}
};
class student : [virtural] public person{
public :
void eat();
void study(){std::cout << "studying" << endl;}
};
class worker : [virtual] public person{
public :
void eat();
void work(){std::cout << "work" << endl;}
};
// eat에서 문제가 생김
>> 다중상속은 인터페이스로부터 받는다
>> 인터페이스클래스 : 모든 메서드가 순수 가상 함수이고 비정적 멤버 변수가 없는 클래스 (보통 변수명에 I를 붙인다)
>> 추상클래스 : 순수 가상 함수가 하나 이상 들어 있는 클래스
>> 다형적클래스 : 가상함수가 하나 이상 들어 있는 클래스
class IPerson {
virtual ~Iperson(){}
virtual void Eat() = 0;
virtual void getAge() = 0;
};
class IStudent : virtual IPerson{
virtual void Study() = 0;
};
class IWorker : virtual IStudent{
virtual void Work() = 0 ;
};
class Researcher : IStudent, IWorker {
void Eat(){
std::cout << "Eating" << end;
}
void Study(){
std::cout << "studying" << endl;
}
void Work(){
std::cout << "working" << endl;
}
int age = 0;
int getAge = {return age;}
}