一、纯虚函数和抽象类
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++抽象类的使用: