C++c 类的初始化始

c++ 类中常量成员,和引用成员初始化 - 开源中国社区
当前访客身份:游客 [
当前位置:
/******************************************************* &*author:彭晓林 &*copyright: 版权所有,翻版不究 &*function: 类成员常量和引用的初始化示例 &******************************************************/
#include &iostream& #include &string&
class DEMO {& &public: &&DEMO (int a, int b):x(1), y(z), z(b) &&{ &&&cout&&&构造函数被调用:/n&; &&&cout&&&x = &&& x&& &&&cout&&&y = &&& y &&& &&&cout&&&z = &&& z &&& &&} &private: && && &&int &y; };
int main() { &DEMO *p = new DEMO(1,2);
&while(1); } c++类的常成员和引用成员只能通过构造函数初始化列表进行初始化。
原文链接:
共有0个评论
更多开发者职位上
有什么技术问题吗?
长平狐的其它问题
类似的话题C++类使用默认构造函数时各数据成员的初始化
C++类使用默认构造函数时各数据成员的初始化
&http://blog.csdn.net/pnhuangyu/article/details/&在C++中,当我们没有为一个类定义构造函数时,编译器会自动生成一个默认的构造函数,这个时候可能生成的类对象中的数据成员跟我们所期待的值会不一样,接下来讨论一下当使用默认构造函数生成对象时类中各数据成员的初始化情况。这主要取决于以下三点:(1)&&&&&&数据成员本身的类型;(2)&&&&&&生成的类对象的作用域范围(局部对象和全局对象);(3)&&&&&&特殊的static数据成员。&一、数据成员本身的类型合成的默认构造函数使用与变量初始化相同的规则来初始化成员。具有类类型的成员通过运行各自的默认构造函数来进行初始化;内置和复合类型的成员,如整形、数组和指针,则不自动进行初始化。&#include&"stdafx.h"#include&&string&&using&namespacestd;&class&Test{public:&&&&&&&&&int&a;&&&&&&&&&bool&b;&&&&&&&&&char&c;&&&&&&&&&double&d;&&&&&&&&&strings;};&Test&t2;&int&_tmain(intargc,_TCHAR*argv[]){&&&&&&&&&Testt;&&&&&&&&&return0;}&从上面可以看到,对于int、bool、char、double这些内置数据类型,默认构造函数并不会自动进行初始化,其中存放的都是一些随机值;对于string这种类类型则会调用string类的默认构造函数进行初始化,即将s初始化空串。&二、生成的类对象的作用域范围(局部对象和全局对象)&在前面的代码中,定义了Test类的一个全局对象t2,通过上面可以发现,对于定义在全局作用域中的对象,其内置类型也会进行相应的初始化。&三、特殊的static数据成员static数据成员必须在类定义体的外部定义(正好一次)。不像普通数据成员,static成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化,如代码的的e变量;对于特殊的static const成员则可以在类的定义体中进行初始化,但仍必须在类的定义体之外进行定义,如代码中的f变量。&#include&"stdafx.h"#include&&string&using&namespacestd;&class&Test{public:&&&&&&&&&static&int&e;&&&&&&&&&static&const&int&f&= 0;};&int&Test::e&= 0;const&intTest::f;&int&_tmain(intargc,_TCHAR*argv[]){&&&&&&&&&Testt;&&&&&&&&&return0;}
发表评论:
TA的最新馆藏C++中各种类型的成员变量的初始化方法(ZZ)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++中各种类型的成员变量的初始化方法(ZZ)
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢posts - 45,&
comments - 12,&
trackbacks - 0
C++为类中提供类成员的初始化列表类对象的构造顺序是这样的: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++类中,必须做如下事情:
1.必须对任何const或引用类型成员以及没有默认构造函数的 类 类型 的任何成员 显示地使用初始化列表进行初始化
2.类成员在定义时是不能被初始化的。
3.类的成员初始化顺序与成员变量在构造函数中的位置选后顺序无关,至于成员变量在类中定义的先后顺序有关。
所以下面的例子是错的:
&1&class&x&2&&3&{&4&  int&i;&&6&  int&j;&7&&8&public&:&9&  x(&int&value):j(value),i(j)<span style="color: #&  {<span style="color: #&  }<span style="color: #&}&
对与上面的code,因为i先被初始化(i相对于j先定义的)而在i初始化时,j并没有被初始化,故执行出现问题了。
阅读(...) 评论()推荐这篇日记的豆列
······}

我要回帖

更多关于 c 类初始化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信