C++实现多态的原理
C++的多态是面向对象编程的核心,那么C++的多态是怎么来实现的?今天我们就来探讨一下。 我们先来看下面程序和它的运行结果 #include using namespace std; class Father { public: void fun() { cout << “I am father!” << endl; } }; class Son:public Father { public: void fun() { cout << “I am son!” << endl; } }; int main() { Son son; Father *Pfather= &son; Pfather->fun(); system(“pause”); return 0; } 我相信很多人可能会误将它和C++的多态搞混,认为Son的对象son应该调用Son的成员函数,但事实却不是如此,这是为什么呢? 答:从编译器的角度看: C++编译器在编译时,会确定每个对象调用函数(非虚函数)的地址,这叫做早期绑定(也叫做静态绑定)。 当我们定义了派生类的对象,并取它的地址赋值给基类的指针,这时编译器会自动为派生类对象进行类型转换,将派生类对象转换为基类对象,站在内存的角度来看,访问的就是基类的成员。这是因为派生类的对象的对象模型如下: 基类的成员属于派生类成员的一部分,那么父类和子类的成员变量如何初始化呢