菜单

精明而审慎的选取private承继

2019年8月29日 - Java

落叶知秋地动用private承袭 Effective C++笔记

 

Item
32提议public承继表示is-a的关系,那是因为编译器会在急需的时候将子类对象隐式调换为父类对象。
不过private承继则不然:

class Person { ... };
class Student: private Person { ... };     // inheritance is now private
void eat(const Person& p);                 // anyone can eat

Person p;                                  // p is a Person
Student s;                                 // s is a Student
eat(p);                                    // fine, p is a Person
eat(s);                                    // error! a Student isn't a Person

Person可以eat,但Student却不能eat。那是private承袭和public承继的分裂之处:

http://www.bkjia.com/cjjc/1061313.htmlwww.bkjia.comtruehttp://www.bkjia.com/cjjc/1061313.htmlTechArticle明智地使用private继承 Effective C++笔记 Item
32建议public承袭表示is-a的关系,那是因为编写翻译器会在急需的时候将子类对象隐式转变为父类对象。…

  1. ### 明智而审慎的行使private承袭(Use private inheritance judicious.)

  2. private传承的两条准绳:

  3. 1、 编写翻译器不会将一个derived
    class转化为baseclass,不过却足以显得转变。也正是,他们中间不是is-a的关系。
  4. 2、
    从基类承继的装有的分子和艺术都将改成private属性。也正是,它只持续达成,不合併接口。
  5. private承袭意味着“根据某物达成出”,它和复合争辨,尽大概的选用复合。
  6. 请记住:
  7. 1、
    private承接意味着“依照某物达成出”,它经常比复合的品级低。可是当derived
    class须求拜谒baseclass的protected成员,或然他必要再行定义承继而来的virtual函数时,这种设计才合理。不然,能够使用复合,就尽只怕利用复合。
  8. 2、 和复合不一致,private承接能够寻觅empty
    base最优化。那对从事于“对象尺寸最小化”的程序库开采者来讲,恐怕根本。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图