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)
{
}
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)
{
}
相关文章推荐
- C++成员变量的初始化顺序
- C++成员变量的初始化顺序 标签: C++成员变量初始化顺序 2017-02-22 23:44 101人阅读 评论(0) 收藏 举报 分类: C++程序设计浅尝(46) 原文地址:http://w
- C++成员变量的初始化顺序问题
- c++成员变量初始化方法
- C++特殊数据类型成员变量的初始化
- c++成员变量初始化
- C++成员变量、构造函数的初始化顺序
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- c++成员变量初始化之二
- c++成员变量初始化问题
- C++成员变量的初始化
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C/C++基础问答(1):通过初始化列表和构造函数内赋值初始化成员变量的区别
- C++中各种类型的成员变量的初始化方法
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++中使用初始化列表比在构造函数中对成员变量赋值更高效
- C++中各种类型的成员变量的初始化方法(ZZ)
- c++子类中初始化父类成员变量