C++类成员初始化
来源:互联网 发布:最小公倍数 c语言 编辑:程序博客网 时间:2024/06/04 18:05
本文摘自:http://www.cnblogs.com/sqzxcv/archive/2009/12/02/1615787.html
详情请移步
C++为类中提供类成员的初始化列表
类对象的构造顺序是这样的:
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
1.类里面的任何成员变量在定义时是不能初始化的。也就是
class A{ int value=0;//错误,类数据成员在类声明时不能进行初始化,一般在构造函数中}
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员。
到此,我的问题解决。但是我还想趁机复习一下C++类的初始化:
1.初始化列表
//const int a;A::A(int i):a(i) {} //类的构造函数定义//A a1(100); //函数实现利用构造函数的初始化列表给对象的常数据成员赋初值
2.类外初始化
//static int count; //类中的静态数据成员声明//int A::count=0; //在类外进行初始化定义,定义时不带static关键字
3.若是静态常数据成员,也就是2和3的复合体,如
//static const int b;//const int A::b=1; //随2,都是在类外定义,但const是数据/函数的一部分,要带
4.C++类不能定义常量数组。
关于const,复习一下常量指针:
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。
在C++类中,必须做如下事情:
1.必须对任何const或引用类型成员以及没有默认构造函数的 类 类型 的任何成员 显示地使用初始化列表进行初始化
2.类成员在定义时是不能被初始化的。
3.类的成员初始化顺序与成员变量在构造函数中的位置选后顺序无关,至于成员变量在类中定义的先后顺序有关。
所以下面的例子是错的:
class x{ int i; int j;public : x( int value):j(value),i(j) { }} ;
对与上面的code,因为i先被初始化(i相对于j先定义的)而在i初始化时,j并没有被初始化,故执行出现问题了。
- [C++]C++语言类成员变量初始化总结
- C++_类_不同类型成员变量的初始化方式
- [C++]类成员冒号初始化以及构造函数内赋值
- 初始化C++类成员
- 静态初始化类成员
- 类成员初始化总结
- 类成员的初始化
- C++类成员初始化
- 类成员进行初始化
- 类成员初始化顺序
- 类成员初始化
- Java类成员初始化
- 类成员初始化
- C++类成员初始化
- 类成员初始化实例
- 初始化类成员变量
- C++类成员初始化
- 类成员初始化
- startActivityForResult和setResult详解
- 圆形目标中心点在tof相机坐标系下的三维坐标的计算(2)
- RecyclerView中item内有EditText监听addTextChangedListener出错
- RxJava教程
- android power键流程
- C++类成员初始化
- error LNK2019: 无法解析的外部符号 _gzputs,该符号在函数 "void __cdecl icvPuts(struct CvFileStorage *,char const
- react-native搭建的P2P开源App
- WSClient客户端调用---apache.axis2
- 守护进程二三事与Supervisor
- MySQL 乐观锁与悲观锁
- linux下TCP keepalive 属性设置
- 【Java】数组实例--自动排序
- C++复合数据类型之数组和指针