C++的实现继承和接口继承的小白描述

网上找了很久关于C++的接口继承和实现继承的文章,但大多数都是《Effictive C++》的条款34原话,我想把它理解成自己的话然后写出来。

如有错误之处,请指正,谢谢啦,嘻嘻!

函数就是所说的接口,函数体就是所说的实现

首先是接口继承,在C++中的表现是纯虚函数,因为在父类中,纯虚函数只有函数原型,没有函数体,这就正表示了父类只为他提供了一个接口,而必须在要实例化的子类中实现该接口。

代码依旧用《Effictive C++》上的好了。

class Shape{
public:
    virtual void draw() const=0;
    virtual void error(const std::string &msg);
    int objectID() const;
    ...
};
class Rectangle:public Shape{...};
class Ellipse:public Shape{...};

1、对于上面的接口draw(),如果派生类需要实例化该类的一个对象,那派生类就必须提供一个draw()的实现,否则,编译器就会报错。

    基类说:派生类,你想出现在内存世界里的话你必须把我给你的接口draw()实现了,什么,你不想?那你就活在代码中好了。

设计者的思想是希望派生类只继承接口(也就是声明,也就是函数名)。

    基类说:派生类,你必须提供一个error函数。什么,你也不想?   那可以,用我的。

就是说派生类这时就要么自己实现,要么用基类的版本。设计者的思想就是你希望派生类同时继承函数的接口和实现,但又希望能重新覆写(override)它们所继承的实现。

3、接口object()

    基类说:派生类,你必须继承我的函数和实现。并且这些你都不能动。你要动,那你继承我干嘛?哪还有什么“is-a”关系,散了吧,回家各找各妈。

设计者的思想就是:派生类不可以覆写任何东西,必须使用基类的版本。

理论完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值