抽象类

<span style="font-size:24px;">//抽象类
//---------main.cpp------------

#include <iostream>

using namespace std;

class Display
{

private:
public:
	virtual void init()=0;      //在声明之后写上“=0”,就是纯虚函数
	virtual void write(char *pStr)=0;     //
};
class Monochrome : public Display
{
private:
public:
	virtual void init();            //覆盖父类
	virtual void write(char *pStr); //覆盖父类
};
class ColorAdapter :public Display
{
private:
public:
	virtual void write(char *pStr);           //覆盖父类
};
class SVGA : public ColorAdapter
{
private:
public:
	virtual void init();           //覆盖
};
void Monochrome::init(){}
void Monochrome::write(char *pStr)
{
	cout<<"Monochrome : "<<pStr;
}
void ColorAdapter::write(char *pStr)
{
	cout<<"ColorAdapter : "<<pStr;
}
void SVGA::init(){}
void fn(Display *d)
{
	d->init();
	d->write("hello.\n");
}
int main(int argc,char **argv)
{
	Monochrome mc;
	SVGA svga;
	fn(&mc);
	fn(&svga);
	return 0;
};</span>


Monochrome : hello.
ColorAdapter : hello.
请按任意键继续. . .

抽象类:定义抽象类就是在  类定义 中至少声明一个纯虚函数。纯虚函数就是在虚函数的声明形式后跟  “=0”。

 这种语法格式是一种特别的约定,专门用于规定纯虚函数的,它也是抽象类的唯一标识。

抽象类是不允许有实力对象的,即不能有抽象类创建对象。

<span style="font-size:24px;">void func()
{
	Display a;
	a.init();
}</span>
抽象类不能创建对象,但可以使用抽象类的指针和引用来进行多态编程。

void fn(Display *d)
{
	d->init();
	d->write("hello.\n");
}

只要子类中尚有未被覆盖定义的纯虚函数,那么,子类相对于抽象父类状态不变,也就是子类也是抽象类。

Display类是抽象类,子类Monochrome 完全覆盖了父类中的所有纯虚函数,称为了具体类,而 子类ColorAdapter只覆盖了父类中的write纯虚函数,init纯虚函数没有被覆盖,所以子类ColorAdapter也就是抽象类了。子孙类SVGA由于继承了ColorAdapter,也就继承了write纯虚函数,加上自己的init纯虚函数,因此,子孙类SVGA也就覆盖了爷爷类中的所有纯虚函数,子孙类SVGA就成了具体类了。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值