抽象类

抽象类——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 = &triangle;
    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;
}

声明:以上内容整理自中山大学万海讲师上课内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值