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

来源:互联网 发布:淘宝可以买保健品吗 编辑:程序博客网 时间:2024/06/06 12:41

C++中的类的构造函数:

1.如果类中没有定义构造函数,编译器将生成一个默认构造函数,这个默认构造函数会调用类中所有成员的默认构造函数,但不会对如int,double的基本数据类型做初始化;

 

2.类中可以定义多个构造函数,但每个构造函数应该有不同的参数实现;

 

3.默认构造函数必须定义的情况,当需要定义一个对象数组时,默认构造函数必须定义,因为系统会为每个对象分配空间并调用其默认构造函数,此时不能调用其它的构造函数;如:objectDemo tempDemo[10];//此时objectDemo必须有默认构造函数

默认构造函数就是0参数的构造函数;

 

初始化列表的使用:

1.初始化列表的格式,

objectDemo::objectDemo():mValue(10),mString("test") //此时mValue,mString的值使用初始化列表进行初始化

{

}

 

2.初始化列表的效率比构造函数中赋初值高,因为初始化列表在分配内存的同时给变了赋值,构造函数需要创建对象后再调用构造函数赋值;

 

3.const变量赋初值必须使用初始化列表,

//objectDemo.h

class objectDemo

{

const int kDefaultMax;//当然你也可以直接在这里赋值,但是他就不能随特定对象改变了。

...

}

//objectDemo.cpp

objectDemo::objectDemo():kDefaultMax(1000)

{

}

 

4.还有如下情况也要使用初始化列表

a.数据类型为引用数据成员时;

 

//objectDemo.h

class objectDemo

{

int &tempData; //引用数据成员

...

}

 

b.没有默认构造函数的对象数据成员;

//objectDemo.h

 

class objectDemo

{

  objectBuff mObjectBuff; //objectBuff对象没有默认构造函数

...

}

 

//objectDemo.cpp

objectDemo::objectDemo():mObjectBuf(10*1024)

{

}

 

 

c.没有默认构造函数的超类;

//objectDemo.h

class objectDemo:objectParent //此父类没有默认构造函数

{

...

}

//objectDemo.cpp

 

objectDemo::objectDemo():objectParent("Good Boy")

{

}

 

后面三个不知道正不正确,知道的告诉我下,呵呵。

 

5.初始化列表有个重要问题需要清楚,变量被初始化的顺序不是初始化列表中的顺序,而是类中变量的定义顺序进行的。

 

 

原创粉丝点击