원본 코드:
https://github.com/GbLeem/CodingTest2024/blob/main/CPP/Inheritance/inheritance_test.cpp
Bar()
함수가 overriding 된 함수이며 실행 예시를 보면 클래스 type에 따라 실행된다.Foo()
함수가 가상함수이며 실행 예시를 보면 실제로 가리키는 것에 따라 실행된다.d
는 Derived 타입변수이며 Base로 부터 상속을 받았으므로, Base Class의 멤버함수 OnlyBase()를 쓸 수 있다.#include <iostream>
using namespace std;
class Base
{
public:
virtual void Foo()
{
printf("Base::Foo\n");
}
void Bar()
{
printf("Base::Bar\n");
}
void onlybase()
{
cout << "onlybase\n";
}
};
class Derived : public Base
{
public:
virtual void Foo()
{
printf("Derived::Foo\n");
}
void Bar() //Overriding
{
printf("Derived::Bar\n");
}
void OnlyDerived()
{
cout << "only derived\n";
}
};
int main()
{
Derived* d = new Derived(); //여기서 base 묵시적으로 만들어짐
Base* b = reinterpret_cast<Base*>(d);
Base* b2 = new Base();
d->Foo(); //Derived::Foo
d->Bar(); //Derived::Bar
d->onlybase();
d->OnlyDerived();
cout << "\n";
b->Foo(); //Derived::Foo
b->Bar(); //Base::Bar
b->onlybase();
cout << "\n";
b2->Foo(); //Base::Foo
b2->Bar(); //Base::Bar
b2->onlybase();
}