C++中的抽象类和接口

2017-10-14  本文已影响0人  nethanhan

抽象类

纯虚函数

class Shape
{
    public:
        virtual double area() = 0;
};

这里 = 0 用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。
举一个例子:

#include <iostream>
#include <string>

using namespace std;

//抽象类 Shape
class Shape
{
public:
    //声明一个纯虚函数
    virtual double area() = 0;
};

//继承Shape抽象类
class Rect : public Shape
{
    int ma;
    int mb;
public:
    Rect(int a, int b)
    {
        ma = a;
        mb = b;
    }
    //实现父类的纯虚函数
    //然后成为虚函数
    double area()
    {
        return ma * mb;
    }
};

//继承Shape抽象类
class Circle : public Shape
{
    int mr;
public:
    Circle(int r)
    {
        mr = r;
    }
    //实现父类的纯虚函数
    //然后成为虚函数
    double area()
    {
        return 3.14 * mr * mr;
    }
};

//这里使用到多态特性
void area(Shape* p)
{
    double r = p->area();
    
    cout << "r = " << r << endl;
}

int main()
{
    //定义2个子类
    Rect rect(1, 2);
    Circle circle(10);
    
    //传递子类对象,使用多态特性
    area(&rect);
    area(&circle);
    
    return 0;
}

输出结果为:

r = 2
r = 314

这里的Shape抽象类只能用作父类被继承,子类必须实现纯虚函数的具体功能。子类中实现了父类的纯虚函数后成为虚函数。如果子类没有实现纯虚函数,则子类成为抽象类。

接口

举个例子:

#include <iostream>
#include <string>

using namespace std;

//定义接口Channel
class Channel
{
    //没有成员变量
public:
    //所有成员函数都是公有的
    //所有成员函数都是纯虚函数
    virtual bool open() = 0;
    virtual void close() = 0;
    virtual bool send(char* buf, int len) = 0;
    virtual int receive(char* buf, int len) = 0;
};

int main()
{
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读