问题及代码:
#include <iostream> using namespace std; class Base { public: virtual void Who() =0; //纯虚函数 }; class FirstDerived:public Base { public: void Who() { cout<<"F"; } }; class SecondDerived:public Base { public: void Who() { cout<<"S"; } }; int main() { FirstDerived first_obj; SecondDerived second_obj; Base &bref=first_obj; //bref引用first_obj bref.Who(); //相当于first_obj.Who(),输出F bref=second_obj; //将second_obj赋值给bref,实际上相当于赋值给fitst_obj bref.Who(); //所以在这里输出的时候是输出的first_obj.Who(),输出F Base *bp; //构建一个基类的指针 bp=&first_obj; //对first_obj取地址 bp->Who(); //指向类FirstDerived的成员函数Who() bp=&second_obj; //对second_obj取地址 bp->Who(); //指向类SecondDerived的成员函数Who() return 0; }
运行结果:
知识点总结:
纯虚函数的定义:在虚函数声明末端加上 =0;
有纯虚函数的类叫做虚基类
学习心得:
这个阅读程序,很多人,包括我一看就认为输出结果是FSFS
但是仔细看一下, bref=second_obj; 这个语句
之前bref对first_obj做了引用,这里就相当于second_obj对fiest_obj进行的赋值,所以bref.Who()中,仍然输出的是F
所以最后输出结果是FFFS
原文:http://blog.csdn.net/destiny_forever/article/details/46315703