您的位置:首页 > 编程语言 > C语言/C++

C++成员变量的初始化

2011-09-13 09:51 393 查看
类对象的构造顺序是这样的:

1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员

2.进入构造函数后在构造函数中执行一般计算

1.类里面的任何成员变量在定义时是不能初始化的。

2.一般的数据成员可以在构造函数中初始化。

3.const数据成员必须在构造函数的初始化列表中初始化。

4.static要在类的定义外面初始化。

5.数组成员是不能在初始化列表里初始化的。

6.不能给数组指定明显的初始化。

这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?

没有办法,我只好转而求助于静态数据成员。

到此,我的问题解决。但是我还想趁机复习一下C++类的初始化:

1.初始化列表:CSomeClass::CSomeClass() : x(0), y(1){}

2.类外初始化:int CSomeClass::myVar=3;

3.const常量定义必须初始化,C++类里面使用初始化列表;

4.C++类不能定义常量数组。

关于const,复习一下常量指针:如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,

const就是修饰指针本身,即指针本身是常量。

c++各种不同类型成员根据是否static 、时候const类型的初始化方法不尽相同,java的语法就没有这么复杂,

怪的得那么多人都跑去学Java了。以前面试时被人问到这个问题回答不出来,写代码时也经常搞乱了,

这里翻了下书,总结一下。

-----------------Test.h----------------------------

#pragma once

class Test

{

private :

int var1;

// int var11= 4; 错误的初始化方法

const int var2 ;

//const int var22 =22222; 错误的初始化方法

static int var3;

// static int var3333=33333; 错误,只有静态常量成员才能直接赋值来初始化

static const int var4=4444; //正确,静态常量成员可以直接初始化

static const int var44;

public:

Test(void);

~Test(void);

};

--------------------Test.cpp-----------------------------------

#include ".\test.h"

int Test::var3 = 3333333; //静态成员的 正确的初始化方法

//int Test::var1 = 11111;; 错误 静态成员才能初始化

//int Test::var2 = 22222; 错误

//int Test::var44 = 44444; // 错误的方法,提示重定义

Test::Test(void) :var1(11111),var2(22222) //正确的初始化方法 , var3(33333) 不能在这里初始化

{

var1 =11111; //正确, 普通变量也可以在这里初始化

//var2 = 222222; 错误,因为常量不能赋值,只能在 “constructor initializer (构造函数的初始化列表)” 那里初始化

var3 =44444; //这个赋值时正确的,不过因为所有对象一个静态成员,所以会影响到其他的,这不能叫做初始化了吧

}

Test::~Test(void)

{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: