zoukankan      html  css  js  c++  java
  • Effective C++读书笔记04

    2012-03-30

    1、绝不要重新定义继承而来的缺省参数值(对于virtual)

         class base

         {

         public :virtual void draw(color c=RED)const=0;

         }

         class derived public base

         {

         public :virtual void draw(color c=GREEN)const;

         }

         base *p=new derived;     //p的静态类型为base*,动态类型为derived*

         虚函数满足动态绑定,依据动态类型调用,∴p->draw(RED);                   //没有问题

         但缺省参数是静态绑定,依据静态类型调用,∴p->draw();

         调用的是基类的静态绑定(red),子类的动态绑定,相当于derived::draw(red)

         即,基类子类各起一半作用,并没有调用子类的默认函数,危险

    2、template产生一群class,其中对象类型不影响class的行为

         inheritance产生一群class,其中对象类型会影响class的行为

         比如,对于birds,不同的class的run,fly行为不同,用inheritance

         对于stack,不同类型的class,其push,pop相同,用template

    3、如果私有继承,编译器不会自动把一个子类对象转换为一个基类对象,这与公有继承相反

         且由私有继承过来的所有成员,在子类中都会变成private类型

    4若类中什么都不写,编译器会自动生成一个默认构造函数,一个复制构造函数,一个析构函数,一个赋值运算符,一个取址运算符

         取址运算符解释:

         对于time类,则会有

         Time * operator&(){return this;}

         const Time * operator&()cosnt{return this;}

         对应于 Time *p=&p1;这样的操作

  • 相关阅读:
    如果你的领导是力量型,你在汇报工作时应该注意()。
    项目管理的10项原则
    扑克k,你知道的人物吗?
    搭建属于您自己的软件版本控制
    Android保持屏幕常亮的方法
    BMP图像数据格式详解
    Android终止线程的方法
    使用ContentProvider访问其他应用的SharedPreferences数据
    android gps定位LocationManager
    Android属性之build.prop生成过程分析
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2433017.html
Copyright © 2011-2022 走看看