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

来源:互联网 发布:淘宝类目排行榜 编辑:程序博客网 时间:2024/06/03 23:45

一、整体代码

     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


原创粉丝点击