#include <iostream>
class Lion {
public:
Lion() {
std::cout << "Lion Consturctor" << std::endl;
}
virtual void speak() {
std::cout << "Lion!" << std::endl;
}
virtual ~Lion() {
std::cout << "Lion Desturctor" << std::endl;
}
private:
double lionData;
};
class Tiger {
public:
Tiger() {
std::cout << "Tiger Consturctor" << std::endl;
}
virtual void speak() {
std::cout << "Tiger!" << std::endl;
}
virtual ~Tiger() {
std::cout << "Tiger Desturctor" << std::endl;
}
private:
double tigerData;
};
class Liger : public Tiger, public Lion {
public:
Liger() {
std::cout << "Liger Consturctor" << std::endl;
}
virtual void speak() override {
std::cout << "Liger!" << std::endl;
}
virtual ~Liger() {
std::cout << "Liger Desturctor" << std::endl;
}
private:
double ligerData;
};
Size of Derived class
Virtual Table 작동 방식
polyLion
int main() {
Tiger *polyLion = new Liger();
polyLion->speak(); // virtual table 포인터는 라이거를 가리킴
delete polyLion;
return 0;
}
polyTiger
int main() {
Tiger *polyTiger = new Liger();
polyTiger->speak(); // virtual table 포인터는 라이거를 가리킴
delete polyTiger;
return 0;
}
ligerPtr
int main() {
Liger *ligerPtr = new Liger();
ligerPtr->speak(); // Lion, Tiger의 virtual table 모두 라이거를 가리킴
delete ligerPtr;
return 0;
}
PREVIOUSInheritance