构造函数
一。构造函数:当创建一个对象时,构造函数会被自动调用,主要是用来对数据成员进行初始化和其他需要处理的事务。
二。构造函数的性质:
1.构造函数与类名相同且不可以有返回值;
2.可以对构造函数进行重载,但是每个构造函数必须拥有各不相同的函数署名;
3.若C是一个类,可以定义任意维数的C对象数组,若C有默认构造函数,数组中每一个C对象都会调用默认构造函数;
三。什么时候编译器不会为类生成一个共有的默认构造函数呢?
1.一个类显示的声明了任何构造函数;
2.一个类声明了一个非公有的默认构造函数;
四。拷贝构造函数创建一个新的对象,此对象是另外一个对象的拷贝品。
1.拷贝构造函数的两种原型:Person(Person&),Person(const Person&);两种原型的参数类型都是引用;
2.拷贝构造函数可以有多于一个的参数,但是第一个以后的所有参数必须有默认值;
例如:Person(const Person&p,bool married = false);
3.若类的设计者不提供拷贝构造函数,编译器会自动生成一个,将源对象的所有数据成员的值逐一赋给目标对象的数据成员。
五。1.若一个类包含指向动态存储空间指针类型的数据成员,就必须要为这个类设计构造函数。
2.由于默认的拷贝构造函数只会拷贝类的成员,因此,拷贝的类和源类指向同一个空间;
3.我们自己设计的拷贝构造函数,确保二者指向不同的存储区域,虽然两块存储区域中保存着相同的字符串。
六。禁止通过传值方式传递和返回引用。比如:通过传值的方式将对象传递给一个函数和通过传值的方式返回一个对象。
若拷贝构造函数是私有的,则顶层函数和其它类的成员函数就不可以通过传值来传递和返回该类的对象,因为这两个操作都需
要调用拷贝构造函数。
七。1.const类型的数据成员必须通过构造函数初始化列表的方法。这也是初始化const类型数据成员的唯一方法。
2.必须要说明的是,初始化列表仅在构造函数中有效,不可以用于其它函数。构造函数的初始化列表可以初始化任何数据成员,
但是const类型数据成员不可以用其它方法进行初始化。
3.数据成员初始化顺序完全取决于他们在类中的次序,与他们在初始化端中出现的次序无关。
4.当然初始化列表若完成了所有的初始化工作,则构造函数中可以没有任何代码。
八。C++操作符new和new[]在分配存储空间的时同时还会调用相应的构造函数,而malloc和calloc则无法完成这个任务。
九。1.对象的析构函数会被自动调用。例如:以某个类作为数据类型的变量超过其作用范围,delete删除动态分配的对象。
2.析构函数不带参数,因此不可以被重载,每个类只可以有一个析构函数,同样析构函数没有返回值。