构造函数
1、构造函数的概念和作用
(1)概念
构造函数就是一类特殊的成员函数,其名字和类一样,不写返回值类型(void也不可以写),可以有参数,可以重载。
如果定义类时没写构造函数,则编译器生成一个默认的无参的构造函数 ,默认构造函数无参数,不做任何操作。如果定义了构造函数,则编译器不生成默认的无参数的构造函数
注意:
一个类可以有多个构造函数。
对象生成时构造函数自动被调用。对象一旦生成,就再也不能在其上执行构造函数 。
(2)作用
对对象进行初始化,如给成员变量赋初值
(3)为什么需要构造函数
① 构造函数执行必要的初始化工作,有了构造函数,就不 必专门再写初始化函数,也不用担心忘记调用初始化函数。
② 有时对象没被初始化就使用,会导致程序出错。
2、构造函数在数组中的使用
3、复制构造函数的概念
只有一个参数,即对同类对象的引用。
形如 X::X( X& )或X::X(const X &), 二者选一 ,后者能以常量对象作为参数,适用范围更广一些
如果没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制构造函数完成复制功能。
注意:不允许有形如 X::X( X )的构造函数
4、复制构造函数被调用(起作用)的三种情况
①当用一个对象去初始化同类的另一个对象时。
②如果某函数有一个参数是类A 的对象, 那么该函数被调用时,类A的复制构造函数将被调用。
③如果函数的返回值是类A的对象时,则函数返回时, A的复制构造函数被调用
5、常量引用参数的使用
void fun(CMyclass obj_) { cout << "fun" << endl; }
这样的函数,调用时生成形参会引发复制构造函数调用,开销比较大。
所以可以考虑使用 CMyclass & 引用类型作为参数。
如果希望确保实参的值在函数中不应被改变,那么可以加上const 关键字
void fun(const CMyclass &obj) { //函数中任何试图改变obj值的语句都将是变成非法 }
《新标准C++程序设计》3.1.1-3.1.3(C++学习笔记5)
原文:https://www.cnblogs.com/cyn522/p/12250689.html