C++中抽象类和接口详解

1.抽象类

在面向对象编程中,抽象类是一种只能定义类型,不能生成对象的类,它是对一系列看上去不同,但是本质相同的具体概念的抽象。最典型的抽象类就是“图形”,三角形、矩形、圆都是图形,它们都有边长、面积属性,“图形”类就是对这系列的抽象。

程序设计中,我们可以定义一个表征图形的类,然后具体图形继承该类。图形类,即基类,定义如下:

class shape{
public:
    double area(){    //求面积
        //如何求??
    }
};

实际上,只要是具体图形就有面积这个量,但是对“图形”求面积是没有任何意义的,只有在知道具体的图形类型之后才能求面积。所以对“图形”来说,area()函数无法实现,且不可让shape生成对象(生成对象无意义),这就需要把shape定义成一个抽象类,把area()函数声明为纯虚函数即可:

virtual double area() = 0;    //纯虚函数

总结何为抽象类:其实,在c++中并没有抽象类的概念,要实现抽象类则需要通过纯虚函数实现。纯虚函数指的是只定义函数原型的成员函数。在c++的类中,只要存在纯虚函数,那么该类就是抽象类。

(1)每个具体图形的求面积算法不一样,所以加上virtual关键字,表明该函数是虚函数,在子类中重写时可以发生多态

(2)为对shape类求面积无意义,所以加上“=0”表明该函数声明为纯虚函数,不需要定义函数体;

(3)抽象类不能生成对象,只能用作父类被继承,子类必须实现纯虚函数的具体功能,在子类中,父类的纯虚函数被实现后就变成虚函数,当然,如果子类没有实现父类的纯虚函数,那么子类也是抽象类一个。

class shape
{
public:
    //纯虚函数
    virtual double area() = 0;

};

//定义圆形类
class circle : public shape
{
private:
    int r;

public:
    circle(int a) : r(a)
    {}

    double area()
    {
        return r * r * 3.14;
    }
};

//定义矩形类
class rectangle : public shape
{
private:
    int x;
    int y;

public:
    rectangle(int a, int b) : x(a), y(b)
    {}

    double area()
    {
        return x * y;
    }
};


int main(void)
{
    rectangle r(5, 6);
    circle c(5);

    printf("圆形面积为: %.2lf\n", c.area());
    printf("矩形面积为: %.2lf\n", r.area());

    return 0;
}

编译运行:

è¿éåå¾çæè¿°

2.接口

在第一节中,我们了解了何为抽象类(类中含有纯虚函数),那么理解什么是接口就简单了。C++中接口也是一种特殊的类,需要满足:

(1)类中没有定义任何成员变量

(2)类中所有成员函数都是共有且都是纯虚函数

举例:

class deviceOp
{
public:
    virtual bool OpenDev() = 0;
    virtual void CloseDev() = 0;
    virtual bool WriteDev(const char* buf, int len) = 0;
    virtual int ReadDev(char* buf, int len) = 0;
};

接口是一种特殊的抽象类,所以抽象类具有只能被继承不能创建对象的特征它也具备。

转载自:https://blog.youkuaiyun.com/qq_29344757/article/details/77346934

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值