도 pba
도 pbb
는 객체입니다하지만 그들은 그래서 당신은 그 기본 포인터가 같은 클래스 또는 파생 클래스 객체를 가리킬 수 있습니다 의미 다형 포인터 사용 코드에 입력 한 기본 클래스 Base
의 포인터.
객체는 새로운 것이 아니다 PBB로 만들거나 자신 PBA,이 예제를 고려하십시오
포인터 PBA 및 PBB 따라서 클래스를베이스의 객체를 할당되거나 파생 될 수 있도록 런타임에 #include <string>
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Print() const { cout << "Base print()" << endl;} // virtual function
void Greet()const {cout << "in Base Say: hello!" << endl;}
};
class Derived : public Base
{
public:
void Print() const { cout << "Derived print()" << endl;} // ovrode the base member pritn()
void Greet()const {cout << "in Derived Say: hello!" << endl;}
};
int main()
{
Base* pba = new Derived;
pba->Print(); // Derived print()
pba->Greet(); // in Base Say: hello! ??? because Greet() is not virtual
Base* pbb = new Base;
pbb->Print(); // Base print()
pbb->Greet(); // in Base Say: hello!
return 0;
}
가상 멤버 함수가 그에 따라 호출됩니다.
* 다형성 *의 예입니다. 꽤 광범위한 주제이므로 충분히 정교하게 대답 해 줄 것을 기대할 수는 없습니다 (여기에 몇 가지 중복이 있습니다). – Downvoter
그리고 dynamic_cast의 예입니다. _Derived * pba = new Derived; _ 이 줄에는 의미가 없습니다. _pd = dynamic_cast (pba); _ –
[세트에 고양이와 개가 모두있는 경우] (https : //en.wikipedia .org/wiki/Polymorphism_ % 28computer_science % 29 % 23Subtyping),이 세트의 모든 동물을 소리 내고 싶다면 각 동물마다'Animal :: talk()'를 호출하면됩니다. 그러나이 호출은 동물의 실제 클래스에. – Dialecticus