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;
	}
};

在这里插入图片描述

发布了52 篇原创文章 · 获赞 26 · 访问量 3410

猜你喜欢

转载自blog.csdn.net/weixin_43796685/article/details/103648559