面向对象的程序设计-7-纯虚函数和抽象类

来源:互联网 发布:疯狂的程序员 绝影 编辑:程序博客网 时间:2024/06/03 17:59
纯虚函数就是基类只定义了函数体,没有实现过程。在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。

       定义一个函数为纯虚函数,才代表函数没有被实现。定义它是为了实现一个接口,起到一个规范的作用,规范继承这个。若一个类中至少有一个纯虚函数,则该类称为抽象类。抽象类只能用作其他类的基类,不能建立对象。抽象类不能用作参数类型、函数返回类型或显式转换的类型,但是可以声明抽象类的指针和引用。从基类继承来的纯虚函数,在派生类中仍是虚函数。

可以通过以下的例子简单了解下:

#include <iostream>
using namespace std;
class num
{
private:
int val;
public:
num(int i){val=i;}
virtual void show()=0;//纯虚函数
int get_val(){return val;}
};
class hextype:public num
{
public:
hextype(int i):num(i)
{}
void show(){cout<<hex<<" "<<get_val()<<endl;}//按照十六进制输出
};
class dectype:public num
{
public:
dectype(int i):num(i){}
void show(){cout<<dec<<get_val()<<endl;}//仍按十进制输出
};
void fun(num &n)
{n.show();}
void main()
{
dectype d(50);//输出十进制数
fun(d);//d.show
hextype h(19);//16进制
fun(h);//h.show();
}
//cout<<hex<<i<<endl; //输出十六进制数
//cout<<oct<<i<<endl; //输出八进制数
//cout<<dec<<i<<endl; //输出十进制数

原创粉丝点击