1.构造函数、析构函数与拷贝构造函数介绍
构造函数
构造函数不能有返回值
缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空
创建一个对象时,系统自动调用构造函数
析构函数
析构函数没有参数,也没有返回值。不能重载,也就是说,一个类中只可能定义一个析构函数
如果一个类中没有定义析构函数,系统也会自动生成一个默认的析构函数,为空函数,什么都不做
调用条件:1.在函数体内定义的对象,当函数执行结束时,该对象所在类的析构函数会被自动调用;2.用new运算符动态构建的对象,在使用delete运算符释放它时。
拷贝构造函数
拷贝构造函数实际上也是构造函数,具有一般构造函数的所有特性,其名字也与所属类名相同。拷贝构造函数中只有一个参数,这个参数是对某个同类对象的引用。它在三种情况下被调用:
用类的一个已知的对象去初始化该类的另一个对象时;
函数的形参是类的对象,调用函数进行形参和实参的结合时;
函数的返回值是类的对象,函数执行完返回调用者。
【代码】
C++ Code /* version: 1.0 author: hellogiser blog: http://www.cnblogs.com/hellogiser date: 2014/9/25 */ #include "stdafx.h" #include <iostream> using namespace std; class point { private: int x, y; public: point(int xx = 0, int yy = 0) { x = xx; y = yy; cout << "Constructor" << endl; } point(const point &p) { x = p.x; y = p.y; cout << "Copy Constructor" << endl; } ~point() { cout << "Destructor" << endl; } int get_x() { return x; } int get_y() { return y; } }; void f(point p) { // copy constructor cout << p.get_x() << " " << p.get_y() << endl; // destructor } point g() { point a(7, 33); //constructor return a; // copy constructor temp object } void test() { point a(15, 22); // constructor point b(a); //(1) copy constructor cout << b.get_x() << " " << b.get_y() << endl; // 15 22 f(b);// (2) copy constructor b = g(); // (3) copy constructor cout << b.get_x() << " " << b.get_y() << endl; // 7 33 } int main() { test(); return 0; } /* Constructor Copy Constructor 15 22 Copy Constructor 15 22 Destructor Constructor Copy Constructor Destructor Destructor 7 33 Destructor Destructor */ |