#include<iostream>
using namespace std;
//图形类
//如果一个类拥有纯虚函数,就称这个类是一个抽象类。
//不管这个类中有没有成员属性,只要这个类有纯虚函数,就是一个抽象类,抽象类是不能实例化的
class Shape
{
public:
//求图形面积的方法
//表示图形类声明一个方法getArea(),她是一个纯虚函数,没有函数的实现
//接口
virtual double getArea() = 0;//=0 就是纯虚函数的语法,没有其他含义
int a;
int b;
};
//正方形:
//如果一个普通类,继承拥有纯虚函数的类,如果不重写纯虚函数,依然是个抽象类。
//依然不能被实例化,若想实例化,必须要重写这个父类中的所有纯虚函数
class Rect :public Shape
{
public:
Rect(int a)
{
this->a = a;
}
virtual double getArea()
{
cout << "正方形面积" << endl;
return a*a;
}
private:
int a;//正方形的边长
};
//圆类
class Circle :public Shape
{
public:
Circle(int r)
{
this->r = r;
}
virtual double getArea()
{
cout << "圆形面积" << endl;
return 3.14*r*r;
}
private:
int r;
};
//三角形类
class Tri :public Shape
{
public:
Tri(int a,int h)
{
this->a = a;
this->h = h;
}
virtual double getArea()
{
cout << "三角形面积" << endl;
return 0.5*a*h;
}
private:
int a;//底
int h;//高
};
//面向抽象类写的一个架构函数
void printArea(Shape *sp)//多态
{
cout << sp->getArea() << endl;
}
//业务层,面向抽象类编程
int main()
{
//main中所有使用的变量类型都是抽样类的Shape的类型
Shape *sp1 = new Rect(10);
Shape *sp2 = new Circle(20);
Shape *sp3 = new Tri(10,20);
printArea(sp1);
printArea(sp2);
printArea(sp3);
return 0;
}
总结:
如果一个类拥有纯虚函数,就称这个类是一个抽象类。
不管这个类中有没有成员属性,只要这个类有纯虚函数,就是一个抽象类,抽象类是不能实例化的。
如果一个普通类,继承拥有纯虚函数的类,如果不重写纯虚函数,依然是个抽象类,依然不能被实例化,若想实例化,必须要重写这个父类中的所有纯虚函数。