// C++
#include <iostream>
using namespace std;
class Base
{
public:
void func()
{
cout << "Base" << endl;
}
};
class Derived : public Base
{
public:
void func()
{
cout << "Derived" << endl;
}
};
class Derived1 : public Derived
{
void func()
{
cout << "Derived1" << endl;
}
};
void foo(Base& base)
{
base.func();
}
int main()
{
Base b;
Derived d;
b.func();
d.func();
Base& b0 = d;
b0.func();
Base* b1 = &d;
b1->func();
foo(b);
}
Output:
Base
Derived
Base
Base
Base
// C++
#include <iostream>
using namespace std;
class Base
{
public:
virtual void func()
{
cout << "Base" << endl;
}
};
class Derived : public Base
{
public:
void func() // 자식 클래스에 오버라이딩 된 함수에도 virtual이 적용된다.
{
cout << "Derived" << endl;
}
};
class Derived1 : public Derived
{
void func()
{
cout << "Derived1" << endl;
}
};
void foo(Base& base)
{
base.func();
}
int main()
{
Base b;
Derived d;
b.func();
d.func();
Base& b0 = d;
b0.func();
Base* b1 = &d;
b1->func();
foo(b);
}
Output:
Base
Derived
Derived
Derived
Base
// C++
#include <iostream>
using namespace std;
class Character
{
public:
~Character()
{
cout << "~Character" << endl;
}
};
class Player : public Character
{
public:
~Player()
{
cout << "~Player" << endl;
}
};
int main()
{
Character* ch = new Player;
delete ch;
}
Output:
~Character
// C++
#include <iostream>
using namespace std;
class Character
{
public:
virtual ~Character()
{
cout << "~Character" << endl;
}
};
class Player : public Character
{
public:
~Player()
{
cout << "~Player" << endl;
}
};
int main()
{
Character* ch = new Player;
delete ch;
}
Output:
~Player
~Character