C++多态(二)---抽象类与C++11新增

C++多态

抽象类
定义

在面向对象的概念中,所有的对象都是通过类来描述的,但是,反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是一个抽象类。
C++中使用纯虚函数的方式来实现抽象类的功能

C++实现抽象类方式

在纯虚函数的后面跟上=0,则这个函数为纯虚函数。包含纯虚函数的类称之为抽象类(接口类),抽象类不能实例化对象因为抽象类中没有具体的方法,所以无法实例化对象,派生类继承之后也不能实例化对象,只有将基类中的抽象类重写了,才能实例化对象。

class A
{
	virtual void Func() = 0;
};

int main()
{
	A a; //error
}

在这里插入图片描述
抽象类多态继承的方式

class A
{
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func()
	{
		cout << "virtual B::Func()" << endl;
	}
};

int main()
{
	B b;
}
C++11新增特性
override & final
  • 当使用override来修饰虚函数时:表修饰派生类虚函数进行强制重写虚函数
class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func() override //表示强制重写虚函数
	{
		cout << "virtual B::Func()" << endl;
	}
};

int main()
{
	A *b = new B();
	b->Func(); //编译器会首先检测其静态类型是否合法
}
  • 当使用final来修饰虚函数时:表示修饰虚函数不可以在被派生类所重写
class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func() final //表示禁止再被重写
	{
		cout << "virtual B::Func()" << endl;
	}
};

class C : public B
{
public:
	virtual void Func() //error
	{
		cout << "virtual C::Func()" << endl;
	}
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值