Effective c++ 整理

                                                            
    1、不在构造和析构函数里边调用虚函数                                                        
        一个基类里边有一个构造函数和纯虚函数,然后基类的构造函数的实现里边调用了这个纯虚函数。                                                    
        子类public继承基类,子类中对基类的纯虚函数进行了重新实现。                                                    
                                                            
        此时我们构造一个子类对象:                                                    
            由于子类public继承于基类,那么子类对象构造的时候会首先调用基类的构造函数,在调用基类的构造函数的时候                                                
        基类构造函数里边的虚函数会被调用而不是子类里边的虚函数,即使目前要创建的对象是子类类型                                                    
                                                            
                                                            
        在Base class 构造期间的析构函数不会下降到子类阶层,还有一种说法就是在构造函数期间Virtual函数不是虚函数。                                                    
                                                            
        造成的后果:在Base class 的构造函数执行的时候如果虚函数的执行下降到子类,那么Derived 的函数必然会取用Derived 类的local 变量。然而这些local  变量没有被初始化                                                    
        更深层次的原因是,Derived class 对象 的 Base class部分在构造期间,对象的类型是Base  而不是Derived 类型,如果使用运行期间的类型信息,可以发现对象的类型为Base,也就是说                                                    
        在Derived class的构造函数没有执行之前对象的类型为Base 类型。                                                    
                                                            
        析构函数也是同理                                                     
    2、区分接口继承和实现继承                                                      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值