纯虚函数和抽象类以及应用实例

一、纯虚函数和抽象类

    1、纯虚函数是一个在基类中说明的函数,在基类中没有定义,要求任何派生类都定义自己的版本

    2、纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分)

    3、纯虚函数说明形式:

              virtual    类型  函数名  (参数表)=0;

     4、一个具有纯虚函数的基类成为抽象类


二、代码介绍:

#include <iostream>
using namespace std;

////面向抽象类编程(面向一套预先定义好的接口编程)

class  Figure //含有纯虚函数抽象类
{
public:
	//约定一个统一的界面(接口),让子类使用,让子类必须去实现
	virtual void getArea() = 0 ; //纯虚函数
};

// 定义一个三角形
class Circle : public Figure
{
public:
	Circle(int a, int b)
	{
		this->a = a;
		this->b = b;
	} 
	// 继承之后,需要实例化,要不然还是抽象类
	virtual void getArea()
	{
		cout<<"圆形的面积: "<<3.14*a*a<<endl;;

	}
private:
	int a;
	int b;
};

class Tri : public Figure
{
public:
	Tri(int a, int b)
	{
		this->a = a;
		this->b = b;
	}
	virtual void getArea() 
	{
		cout<<"三角形的面积: "<<a*b/2<<endl;;
	}

private:
	int a;
	int b;
};

// 定义一个四边形
class Square : public Figure
{
public:
	Square(int a, int b)
	{
		this->a = a;
		this->b = b;
	}
	virtual void getArea() 
	{
		cout<<"四边形的面积: "<<a*b<<endl;;
	}

private:
	int a;
	int b;
};

// 统一用父类指针执行求面积的过程。  父类指针Figure *base
// 用后来的类去操作之前写的框架
void objplay(Figure *base)
{
	base->getArea(); //会发生多态
}


void main()
{

	//Figure f;    //抽象类不能被实例化
//	Figure *base = NULL; // 抽象类不能被实例化,这样是可以的,也可以不用写

	Circle c1(10, 20);
	Tri t1(20, 30);
	Square s1(50, 60);

	//面向抽象类编程(面向一套预先定义好的接口编程)
    c1.getArea();   // 可以这样访问 c1 ,也可以使用下面的方法访问
	objplay(&c1);   //这种方法是定义一个框架来访问的
	objplay(&t1);
	objplay(&s1);

	system("pause");
	return ;
}


3、C++抽象类的使用:

扫描二维码关注公众号,回复: 2161715 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_40191710/article/details/81052022