C++动静态联编和纯虚函数

动、静态联编

简单的说,静态联编就是在程序编译时就完成的过程,而动态联编是在程序运行中完成的过程

class CA
{
public:
	void CAFun()
	{
		cout<<"CA----Fun"<<endl;
	}
}

CA A;
A.CAFun();
//这里就是一个静态联编

静态联编平时使用较多,在C++实现多态时多用动态联编

class CA
{
public:
	virtual void Fun()
	{
		cout<<"CA----Fun"<<endl;
	}
}
class CB : public CA
{
public:
	void Fun()
	{
		cout<<"CB----Fun"<<endl;
	}
}
class CD :public CA,public CB
{
public:
	void Fun()
	{
		cout<<"CA----Fun"<<endl;
	}
}
//这就是一个动态联编
void objFun(CA * src[],int len)
{
	for(int i=0;i<len;++i)
	{
		src[i]->Fun();
	}
}

CB B;
CD D;
CA *A[2]={&B,&D};

objFun(A,2);//调用函数
//这里输出
//CB----Fun
//CD----Fun

纯虚函数

class CA
{
public:
	virtual void Fun()=NULL;//纯虚函数
}

上面就是纯虚函数的书写方式,那么它有什么作用呢
纯虚函数的作用是为派生类提供一个统一的接口,当一个基类对虚函数没有一个有意义的实现的时候,可以声明纯虚函数
有纯虚函数存在的类,叫做抽象类,因为它存在纯虚函数,所以必定是作为一个基类,所以也叫做抽象基类,它的纯虚函数的实现在派生类中实现,如果派生类没有给出一个实现,那么这个派生类继续作为一个抽象基类存在
抽象基类的特点
抽象基类不能实例化对象,不过可以通过声明指针和引用来指向派生类对象
习惯上,将抽象基类的构造析构属性改为保护

class CA
{
public:
	virtual void Fun()=NULL;
	virtual void Fun(int n)=NULL;
}

class CB :public CA
{
public:
	void Fun()
	{
		cout<<"CBFun"<<endl;
	}
}

class CD :public CB
{
public:
	void Fun(int n)//CB中没有对CA中重载的纯虚函数进行实现,在这里实现
	{			
		cout<<"CDFun"<<endl;
	}
}

抽象基类不能实例化对象,不过可以通过声明指针和引用来指向派生类对象

CA *pA;
CB B;
pA=&B;
pA->Fun();
//这里输出CB的Fun函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值