C++对象初始化
来源:互联网 发布:java 订阅模式 编辑:程序博客网 时间:2024/06/09 14:34
在C++里,对象初始化是一个非常重要但又容易令人混淆的问题。这里是自己的一些总结。
一。初始化与赋值的含义:
初始化:包括创建(或说定义)对象并且赋给初值。(如果一个对象只被创建而没有被初始化,则该变量只能用于被赋值)。
赋值: 擦除对象的当前值并用新值代替。
二。内置类型:
(一)直接初始化:
1.空初始化:即无参数无括号形式
如int i,new int,new int[10].当在所有函数之外时,初始化为0;当在某一函数中时,没初始化。
2.值初始化:即无参数有括号形式,且括号只能在类型名后,而不能在变量名之后,即只能创无名对象。
对象被值初始化为0.
如:int() //创建了一个无名对象,其被值初始化为0.一般将该无名对象初始化化或赋值给某有名对象,或直接作为无名对象使用
new int();
new int[10]();//创建了一个无名对象,其被值初始化为0.一般将该无名对象初始化化或赋值给某有名对象
vector<int> vi();//这是vector类等容器定义的一个特殊的构造函数。
3.显式初始化:即有参数有括号形式,且当为有名对象时括号在对象名之后,为无名对象时括号在类类型名之后。
如:int i(5);
new int(5);
(二)复制初始化:
1.形式1:int i=5;
2.形式2:int i1=5;
int i2(i1)或int i2=i1;
3.形式3:int i(int(5))或int i=int(5);
三。类类型:
(一)直接初始化:
1.空初始化:即无参数无括号形式
classA obj或new classA,new classA[10].当classA有默认的构造函数时,用该默认构造函数初始化;
若classA无默认的构造函数时,则不能这样定义。
2.值初始化:即无参数有括号形式,且括号只能在类型名后,而不能在变量名之后,即只能创无名对象或者在类的初始化列表中。
若有默认构造函数,则用这个默认构造函数初始化
若无任何构造函数,则会使用值初始化,具体产生什么样的初始值,我有疑问??????
若无默认构造函数,但有自定义的构造函数,则不能用值初始化。
如:
classA(); //创建了一个无名对象,一般将该无名对象初始化化或赋值给某有名对象,或直接作为无名对象使用
new classA();
new classA[10]();
vector<classA> vi(10);//这是vector类等容器定义的一个特殊的构造函数。
3.显式初始化:即有参数有括号形式,且当为有名对象时括号在对象名之后,为无名对象时括号在类类型名之后
如:classA obj(paralist);
new classA(paralist);
(二)复制初始化:
1.形式1: classA obj=onepara;//classA中有一个非explicit的只有一个形参或其引用(onepara与其能匹配)的构造函数才行。
2.形式2: classA obj1=onepara或classA obj1(paralist);
classA obj2(obj1)或classA obj2=classA obj1;
3.形式3: classA obj2(classA(paralist))或classA obj2=classA(paralist);
注意1:在初始化式中符号“=”不是赋值操作符,它能呼叫复制构造函数;
注意2:复制构造函数就是指仅有一个形参且该形参是本身类类型的const引用的构造函数;
注意3:const对象的初始化同上,只是初始化后其值不能再更改;
注意4:引用类型对象的初始化:若不初始化,则其没有意义;
非const引用只能指向 同类型的 非const的 对象
const引用能指向 相关类型的 const或非const的 对象或字面值,但不可以通过该引用去修改其绑定的对象。
- objective-c对象初始化
- OBJECT-C 对象初始化
- Objective-C对象初始化
- Object-C 对象初始化
- c++vector对象初始化
- Objective-C对象初始化小结
- Object-c中对象初始化
- 【Objective-C基础】对象初始化
- Objective-C对象初始化简要
- c++の对象初始化列表
- 快乐学C++:(5) 对象的初始化
- Object-c学习笔记十一-----对象初始化
- 谈谈Objective-C下对象的初始化
- 浅谈 Objective-C 下对象的初始化
- Objective-C基础教程六(对象初始化)
- 浅谈 Objective-C 下对象的初始化
- Objective-C编程之对象初始化
- 浅谈 Objective-C 下对象的初始化
- rmdev、chdev、reducevg、exportvg和importvg命令执行了什么操作
- MVC
- Java值传递和引用传递的问题
- IC Imaging Control 捕捉的BMP转换到Emgu的Image(1)
- IBM Doc center
- C++对象初始化
- iphone上的几个我比较喜欢的应用
- 程序员常犯的5个非技术性错误
- JBPM核心调度过程
- Tomcat性能调优方案
- build.xml
- 每天写出好代码的5个建议
- MIT牛人解说数学体系
- internal in C#