クラス B の getdata() が呼び出されるのはなぜですか??
b1は 型のオブジェクトであるためですB。
非メンバー関数は、それらを呼び出す変数の静的型virtualに従って解決されます。
あなたが与えた場合、呼び出す変数getdata()はb1であり、タイプはBです。したがって、B::getdata()呼び出されます。
あなたが提供したリンクでは、http://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htmがareatype のポインターを介して呼び出されるShape*ため、Shape::area()呼び出されます。
このプログラムも検討してください: http://ideone.com/KVjN3
#include <iostream>
class A {public: void getdata() { std::cout<<"Class A\n"; } };
class B: public A { public: void getdata() { std::cout<<"Class B\n"; } };
int main() { B b1; b1.getdata(); A* pa = &b1; pa->getdata(); }
出力:
Class B
Class A
それはあなたのプログラムに非常に似ています。の最初の呼び出しgetdata()は を介して行われるBため、B::getdata()が呼び出されます。2 番目は を介して行われるA*ため、A::getdata()が呼び出されます。
ただし、virtualキーワードを指定すると、これらすべてが変更されます。