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

什么是纯虚函数?

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

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


为什么要使用纯虚函数?

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

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

纯虚函数如何定义?

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

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

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

什么时候使用纯虚函数?

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


定义纯虚函数的具体实现

代码:

#include <iostream>
#include <string>

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 <iostream>
#include <string>

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)要么不对这个纯虚函数做任何处理,等效于上一种情况(该方式不推荐)

经验分享 程序员 微信小程序 职场和发展