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

来源:互联网 发布:软件开发人员收入 编辑:程序博客网 时间:2024/04/28 21:23

网上找了很久关于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{...};

对于上面的接口draw(),如果派生类需要实例化该类的一个对象,那派生类就必须提供一个draw()的实现,否则,编译器就会报错。基类说:派生类,你想出现在内存世界里的话你必须把我给你的接口draw()实现了,什么,你不想?那你就活在代码中好了。设计者的思想是希望派生类只继承接口(也就是声明,也就是函数名)。

而接口error表示,基类说:派生类,你必须提供一个error函数。什么,你又不想?那可以,用我的。
就是说派生类这时就要么自己实现,要么用基类的版本。设计者的思想就是你希望派生类同时继承函数的接口和实现,但又希望能重新覆写(override)它们所继承的实现。

接口object(),基类说:派生类,你必须继承我的函数和实现。并且这些你都不能动。你要动,那你继承我干嘛?哪还有什么“is-a”关系,散了吧,回家各找各妈。设计者的思想就是:派生类不可以覆写任何东西,必须使用基类的版本。
理论完毕。

原创粉丝点击