抽象类——Abstract class
1、定义——什么是抽象类
只包含纯虚函数的类称为抽象类。
那末,什么是纯虚函数呢?
纯虚函数:在基类中声明但是不在基类中定义,每个派生类都必须重新定义和实现的一种虚函数。
格式:
virtual 返回值类型 函数名(形参表) = 0 ;
2、关于抽象类要做的几点说明:
1)、抽象类只能用作基类。
2)、在抽象类中不能定义任何对象。
3)、不能作为函数的返回值类型或者是参数类型。
4)、不能用作显示转换。
5)、可以声明抽象类类型的引用和指向他的指针。
3、举个栗子
#ifndef FIGURE_H
#define FIGURE_H
const double PI = 3.14159; // 圆周率常量
class FIGURE {
public:
void set_size(double x, double y = 0);
virtual double get_area() = 0; // get_area()被声明为纯虚函数
protected:
double x_size, y_size;
};
#endif
#include "Figure.h"
void FIGURE::set_size(double x, double y)
{
x_size = x;
y_size = y;
}
#ifndef TRIANGLE_H
#define TRIANGLE_H
#include "Figure.h"
class TRIANGLE: public FIGURE {
public:
virtual double get_area();
};
#endif
//Trangle.h & .cpp
#include "Triangle.h"
double TRIANGLE::get_area()
{
return (x_size * y_size / 2); // 三角形面积 = 底× 高÷2
}
#ifndef RETANGLE_H
#define RETANGLE_H
#include "Figure.h"
class RECTANGLE: public FIGURE {
public:
virtual double get_area();
};
#endif
//Retangle.h & .cpp
#include "Retangle.h"
double RECTANGLE::get_area()
{
return (x_size * y_size); // 矩形面积 = 长× 宽
}
#ifndef CIRCLE_H
#define CIRCLE_H
#include "Figure.h"
class CIRCLE: public FIGURE {
public:
virtual double get_area();
};
#endif
//Circle.h & .cpp
#include "Circle.h"
double CIRCLE::get_area()
{
return (PI * x_size * x_size); // 圆面积 = p× 半径× 半径
}
int main()
{
TRIANGLE triangle;
RECTANGLE rectangle;
CIRCLE circle;
// 处理三角形
triangle.set_size(15, 8); // 设置三角形的底和高
cout << "Area of triangle is " << triangle.get_area() << "\n";
// 处理矩形
rectangle.set_size(15, 8); // 设置矩形的长和宽
cout << "Area of rectangle is " << rectangle.get_area() << "\n";
// 处理圆
circle.set_size(15); // 设置圆的半径
cout << "Area of circle is " << circle.get_area() << "\n";
return 0;
}
输出结果
Area of triangle is 60
Area of rectangle is 120
Area of circle is 706.858
int main()
{ :
// 处理三角形
figure = ▵
figure->set_size(15, 8); // 设置三角形的底和高
cout << "Area of triangle is " << figure->get_area() << "\n";
// 处理矩形
figure = &rectangle;
figure->set_size(15, 8); // 设置矩形的长和宽
cout << "Area of rectangle is " << figure->get_area() << "\n";
// 处理圆
figure = &circle;
figure->set_size(15); // 设置圆的半径
cout << "Area of circle is " << figure->get_area() << "\n";
:
}
输出结果:
Area of triangle is 60
Area of rectangle is 120
Area of circle is 706.858
FIGURE fun1(int); //错误,FIGURE不可以作为返回值
void fun2(FIGURE a); //错误,FIGURE不可以作为形参
FIGURE & fun3(FIGURE &a); //正确,可以声明FIGURE类型的引用
int main()
{
FIGURE x; //错误,不可以声明一个FIGURE类型的对像
FIGURE *p; //正确,可以声明一个指向FIGURE类型的指针
return 0;
}
声明:以上内容整理自中山大学万海讲师上课内容。