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;这样的操作

  • 相关阅读:
    Jquery源码分析(一)
    Lazyload 延迟加载效果
    20100128
    Linux共享库(so)动态加载和升级
    shell 数组
    Git常用命令解说
    linux shell 数组建立及使用技巧
    linux下查看用户及用户组的方法
    Zypper 用法
    linux shell 数组的长度计算、修改、循环输出等操作
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2433017.html
Copyright © 2011-2022 走看看