zoukankan      html  css  js  c++  java
  • Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

    1、当在一个子类当中调用构造函数,其父类构造函数肯定先被调用。如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数。即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virtual函数呢?析构函数也相同,派生类先于基类被析构,又如何去找派生类相应的虚函数?

    2、做法:将子类的某个函数改为non-virtual,然后在子类构造函数中传递参数给父类函数。然后父类的构造函数就可以安全的调用那个non-virtual了。

    记住:

           在构造和析构期间不要调用virtual函数,因为这类调用不会下降到子类这一层。

    对于赋值操作符,我们常常要达到这种类似效果,即连续赋值:
      int x, y, z;
      x = y = z = 15;  //赋值的连锁反应

      x = (y = (z = 15));//执行顺序

    为了实现上述的连锁赋值,赋值操作符必须返回一个 引用,来指向操作符的左侧实参。

    widget & operator = (const widget& rhs) //返回类型为一个引用

    {

          return *this;                                             //返回左侧对象

    }

    记住:

          令赋值操作符返回一个reference to *this;

     

  • 相关阅读:
    python3 进程_multiprocessing模块
    python3 线程_threading模块
    python3 异常处理
    python3 面向对象补充
    python3 多态,绑定方法与非绑定方法
    python3 uper(),继承实现原理,封装
    python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法
    python3 正则表达式re模块
    python3 json、logging、sys模块
    mysql查询练习
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3916166.html
Copyright © 2011-2022 走看看