C++ 纯虚函数(抽象类)

什么是纯虚函数?

含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被实现,那么,它的派生类还是个抽象类。

含有存虚函数的类也就是抽象类!


为什么要使用纯虚函数?

当一个类要用做基类时,且其派生出的子类都有一个共性的成员函数,其中每个子类的函数用法都不一样;那么,就可以把该类定义为纯虚函数,也就是抽象类。定义为纯虚函数后,该类不可以再创建对象!

例如:
以一个形状类作为基类,其因为是基类,所以派生出的子类圆,长方形,正方形等会有共性的成员函数,假如该共性的成员函数基类中不实现,那么,就可以把它定义为纯虚函数,则该类就会变成抽象类。

C++ 纯虚函数(抽象类)_第1张图片

纯虚函数如何定义?

把虚函数定义好不做任何具体实现

用法:纯虚函数,使用virtual和 =0

// 声明为纯虚函数
virtual float acreage() = 0;

什么时候使用纯虚函数?

1.某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象)。
2.这个类中定义的某些成员函数,只是为了提供一个形式上的接口,准备让子类来做具体的实现。
3.此时,这个方法,就可以定义为“纯虚函数”, 包含纯虚函数的类,就称为抽象类。


定义纯虚函数的具体实现

代码:

#include 
#include 

using namespace std;


class Shape {
public:
	Shape(string colour = "白") { this->colour = colour; }

	// 声明为纯虚函数
	virtual float acreage() = 0;
private:
	string colour;	// 颜色
};

// 因为没有实现acreage()函数,因此,该类依旧是抽象类
class Circle : public Shape {
public:
	Circle(float radius=0.0, string colour="白") : Shape(colour) {
		this->r = radius;
	}

private:
	float r;	// 半径
};

int main(void) {
	Shape s;		// 错误,抽象类不能创建对象
	Circle c;		// 错误,抽象类不能创建对象

	return 0;
}

由上面可以直到,在Circle类中,因为没有实现从抽象类中继承下来的acreage()纯虚函数,因此,Circle类也是抽象类。

那要如何修改呢?

只需要自己实现该纯虚函数后,Circle类就不会变成抽象类了。

// 实现从基类继承下来的纯虚函数
virtual float acreage() { return r * r * 3.14; }
#include 
#include 

using namespace std;


class Shape {
public:
	Shape(string colour = "白") { this->colour = colour; }

	// 声明为纯虚函数
	virtual float acreage() = 0;
private:
	string colour;	// 颜色
};

class Circle : public Shape {
public:
	Circle(float radius=0.0, string colour="白") : Shape(colour) {
		this->r = radius;
	}

	// 实现从基类继承下来的纯虚函数
	virtual float acreage() { return r * r * 3.14; }

private:
	float r;	// 半径
};

int main(void) {
	Shape s;		// 错误,抽象类不能创建对象
	Circle c;		// 可以创建对象

	return 0;
}

纯虚函数的注意事项:

父类声明某纯虚函数后,
那么它的子类,
1)要么实现这个纯虚函数 (最常见)
2)要么继续把这个纯虚函数声明为纯虚函数,这个子类也成为抽象类
3)要么不对这个纯虚函数做任何处理,等效于上一种情况(该方式不推荐)

你可能感兴趣的:(c++,c++)