注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水居

云在青山水在天,人在江湖不得闲

 
 
 

日志

 
 

父类、构造函数、成员对象的调用时机  

2010-11-06 16:30:46|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

查看全文


在使用new创建对象时,主要完成四项工作:
1 构造父类成员对象
2 构造子类成员对象
3 调用父类构造函数
4 调用子类构造函数
这四项工作的时间顺序是怎样的呢?
原则是:先父类后子类,先成员后函数
一级继承
例如:
class X{
    public:
        X(){cout<<"X";}
};
class A{
    public:
         X x1;
         A(){cout<<"A";}
};
class B: public A{
    public:
        X x2;
        B(){cout<<"B";}
};
int main(){
    B b;
}
构造对象B时,根据第1个原则:先父类后子类,先构造A(1),然后构造B(2)。
构造A(1):
 然后根据第2个原则,先成员后函数,先构造A的成员x1,即先调用X构造函数,然后再调用A构造函数
构造B(2):
 根据第2个原则,先成员后函数,先构造B的成员x2,即先调用X构造函数,然后再调用B构造函数
因此输出为:
XAXB

多级继承
在一级继承中这个比较容易分析,在多级继承中就会复杂些,但坚持这两个原则,细心分析也不会出问题的。
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
class X{
    public:
        X(){cout<<"X";}
};
class Y{
    public:
        Y(){cout<<"Y";}
};

class A{
    public:
        A(){cout<<"A";}
        ~

查看全文

  评论这张
 
阅读(2356)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018