问题及代码:
#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