问题及代码:
/*
*copyright (t) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:test.cpp
*作者:张晴晴
*完成日期:2016年6月2日
*版本号:v1.0
*问题描述:阅读程序--纯虚函数
*输入描述:
*程序输出:
*/
#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.Who();//输出的是他引用的别人家的函数,所以输出F;
bref=second_obj;//注意:派生类对象可以对基类对象赋值,所谓的赋值只是对数据成员赋值,
//对成员函数不存在赋值问题,赋值后不能企图通过基类的对象去访问派生类对象的成员,
//因为基类对象的成员和派生类对象的成员是不同的。
//所以这里的bref还是上面引用first_obj的内存,没有分配新的内存
bref.Who();//还是输出F
Base *bp;
bp=&first_obj;//基类型的指针指向的是派生类的对象
bp->Who();//输出的是他引用的别人家的函数,所以输出F;
bp=&second_obj;
bp->Who();//输出的是他引用的别人家的函数,所以输出S;
return 0;
}
//纯虚函数是在基类中声明的虚函数,
//在基类中没有定义具体的操作内容,要求各派生类根据实际需要给出各自的定义。
//纯虚函数与一般的虚函数不同就是在后面加了"=0"。
运行结果:
学习心得:
解析写在上面的代码中。
注意这个程序中有基类对象的引用,还有几类对象的指针的用法,还有基类对象对派生类对象赋值的问题,
要注意引用是不重新分配内存的,而定义一个指针的时候,指针可以重新分配内存。