《Effective C++》之条款34:区分接口继承和实现继承

《Effective C++》

条款34:区分接口继承和实现继承

Public继承由两部分组成

函数接口继承

函数实现继承

三种可能面对的继承

derived class 只继承成员函数的接口

derived class 同时继承函数的接口和实现,但又希望能够覆写它们所继承的实现

derived class 同时继承函数的接口和实现,但不允许覆写任何东西

总结:

接口继承和实现继承不同。在public继承下,derived classes 总是继承base class 的接口。

Pure virtual 函数只具体指定接口继承。

简朴的impure virtual 函数具体指定接口继承及缺省实现继承。

Non-virtual 函数具体指定接口继承以及强制性实现继承。


时间: 2024-10-21 05:37:53

《Effective C++》之条款34:区分接口继承和实现继承的相关文章

Effective C++ 条款34 区分接口继承和是实现继承

1. C++对于函数成员的继承主要有三种: 只继承接口,不继承实现; 同时继承接口和实现,同时允许覆写实现; 继承接口和实现,同时不允许对实现进行覆写. 2. 对于public继承,成员函数的接口应该总是被继承(由于is-a关系的存在),其中: pure-virtual函数的目的只是为了使派生类继承函数接口; impure-virtual(虚但非纯虚)函数的目的是既允许派生类继承接口和实现,又可以重写实现. non-virtual函数的目的是令派生类继承函数的接口以及一份强制实现.(如果想要重写

Effective C++:条款34:区分接口继承和实现继承

(一) class Shape { public: virtual void draw() const = 0; virtual void error(const string& msg); int objectID() const; }; class Rectangle : public Shape {...}; class Ellipse : public Shape {...}; 公有继承的概念看似简单,似乎很轻易就浮出水面,然而仔细审度之后,我们会发现公有继承的概念实际上包含两个相互独立

Effective C++ Item 34 区分接口继承与实现继承

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 关联条款 Item 36 接口继承和实现继承不同.在 public 继承下, derived classes 总是继承 base class 的接口 class Shape{ public: virtual void draw() const = 0; virtual void error(const std::string &msg); int objectID() const; //.

条款36: 区分接口继承和实现继承

作为类的设计者,有时希望派生类只继承成员函数的接口(声明):有时希望派生类同时继承函数的接口和实现,但允许派生类改写实现:有时则希望同时继承接口和实现,并且不允许派生类改写任何东西. class Shape { public: virtual void draw() const = 0; virtual void error(const string& msg); int objectID() const; ... }; class Rectangle: public Shape { ... }

Effective C++:条款32:确定你的public继承塑模出is-a关系

(一) public继承意味着"is-a"关系.它的意思是:如果B以public形式继承自A,那么B类型对象肯定是一个A对象,反之不成立.A是B的一种抽象,B是A的特例.任何使用A的地方,都能使用B. (二) public继承意味着"is a"(是一种)关系: (1)任何一个继承类对象也是一个基类对象: (2)任何可以出现基类对象的地方也可以出现一个继承类对象(例如函数的实参): (3)任何一个可以在基类对象上所做的操作,同样也可以在派生类上操作(结果可能是设计者想

Effective C++ 34 区分接口继承和实现继承

public继承从根本上讲,有两部分:接口继承和实现继承.两者之前的区别很像函数声明与函数定义. 具体设计中,会呈现三种形式:derived class只继承成员函数的接口(纯虚函数):derived class同时继承函数的接口和实现,同时能够重写(override):derived class同时继承函数的接口和实现,但是不允许重写该函数. 1.只继承成员函数的接口(纯虚函数): 例如pure函数 2.同时继承函数的接口和实现,同时能够重写(override): 例如impure函数,为了避

《Effective C++》之条款32:确定你的public继承塑模出is-a关系

<Effective C++> 条款32:确定你的public继承塑模出is-a关系 Public inheritance(公开继承)意味"is-a"的关系. 例子如下: class Person{ ... }; class Student : public Person{ ... }; void eat(const Person& p);//任何人都会吃 void study(const Student& s);//只有学生才到校学习 Person p;/

Effective C++ 55条款及应该记住的事项

1. 让自己习惯C++ 01. 视C++为一个语言联邦 请记住:  C++高效编程守则视状况而变化,取决于你使用C++的哪一部分 02. 尽量以const,enum,inline,替换#define 请记住:  对于单纯变量,最好以const对象或enums替换#defines  对于形似函数的宏(macros),最好改用inline函数替换#defines 03. 尽可能使用const 请记住:  将某些东西声明为const可帮助编译器侦测出错误用法.const可被施加于任何作用域内的

《Effective C++》:条款34:区分接口继承和实现继承

public继承的概念,由2部分构成:函数接口(function Interface)继承和函数实现(function implementation)继承.这两种继承的差异有点像函数的声明和函数的定义之间的差异. 我们在设计class时,有时希望derived class只继承函数的接口(即函数声明):有时候希望derived class继承函数接口和实现,但又覆写它们所继承的实现:又有时候希望derived class同时继承函数的接口和实现,但不覆写任何东西. 为了更好理解上述差异,用一个绘