C++ 构造函数初始化列表

一、整体代码

     Object.h

#ifndef _Object_H_
#define _Object_H_
#include "ObjectA.h"
class Object
{
    public:
        enum E_TYPE
        {
            TYPE_A = 100,
            TYPE_B = 200
        };    
    public:
        // 如果类不提供任何一个构造函数,系统将为我们提供一个不带参数的
        // 默认的构造函数
        Object(int num=0);
        ~Object();
        void DisplayKNum();
    private:
	ObjectA obj;
        int num_;
        const int kNum_;
        int& refNum_;
};
#endif  


     Object.cpp

#include"Object.h"
#include<iostream>
using namespace std;
// 不带参数的构造函数称为默认构造函数
Object::Object(int num) : num_(num),kNum_(num), refNum_(num_),obj(3)//之前没有分配内存,这里是初始化,而不是赋值
{
   cout<<"Object "<<num_<<" ..."<<endl;
}
Object::~Object()
{
   cout<<"~Object "<<num_<<" ..."<<endl;
}
void Object::DisplayKNum()
{
  cout<<"kNum="<<kNum_<<endl;
}


      ObjectA.h

#ifndef _ObjectA_H_
#define _ObjectA_H_
class ObjectA
{
public:


       ObjectA(int num);//如果有了新的构造函数,那么默认构造函数就没有了
       ~ObjectA();
       void DisplayKNum();
private:
       int num_;
};
#endif


      ObjectA.cpp

#include"ObjectA.h"
#include<iostream>
using namespace std;
// 不带参数的构造函数称为默认构造函数
ObjectA::ObjectA(int num)
{
   num_=num;
   cout<<"ObjectA "<<num_<<" ..."<<endl;
}
ObjectA::~ObjectA()
{
   cout<<"~ObjectA "<<num_<<" ..."<<endl;
}
void ObjectA::DisplayKNum()
{
  
}


       01.cpp

#include <iostream>
#include "Object.h"
using namespace std;
// const成员的初始化只能在构造函数初始化列表中进行
// 引用成员的初始化也只能在构造函数初始化列表中进行
// 对象成员(对象所对应的类没有默认构造函数)的初始化,也只能在构造函数初始化列表中进行
int main(void)
{
    Object obj(10);
    obj.DisplayKNum();
    return 0;
}


二、运行结果 

       


三、解释

       一共有四种类型一定要在构造函数初始化列表初始化:

       一、const成员的初始化只能在构造函数初始化列表中进行

       二、 引用成员的初始化也只能在构造函数初始化列表中进行

       三、对象成员的初始化,也只能在构造函数初始化列表中进行,如果代码中没有初始化,那么编译器已经默认添上了对象的构造函数obj( )。

       四、继承父类的构造函数只能在构造函数初始化列表中进行如果代码中没有初始化,那么编译器已经默认添上了父类的构造函数base( )。

       

        对象在初始化列表中初始化,请参考http://blog.csdn.net/yili_xie/article/details/4803428


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值