类和对象(5)—— 构造函数的分类及调用
无参数构造函数、有参数构造函数、赋值构造函数
(3)拷贝构造函数
由已存在的对象,创建新对象。也就是说新对象,不由构造器来构造,而是由拷贝构造器来完成。拷贝构造器的格式是固定的。
拷贝构造函数的作用:用一个对象初始化另外一个对象
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Test { public: //无参数的构造函数 Test() { m_x = 0; m_y = 0; } //有参数的构造函数 Test(int x, int y) { m_x = x; m_y = y; } void printT() { cout << "x=" << m_x << ",y=" << m_y << endl; }
#if 0 //显式地拷贝构造函数 Test(const Test &another) { cout << "Test(const Test &another)..." << endl; m_x = another.m_x; m_y = another.m_y; } #endif #if 0 //会有一个默认的拷贝构造函数 Test(const Test &another) { m_x = another.m_x; m_y = another.m_y; } #endif #if 0 //赋值操作符 void operator=(const Test &another) { m_x = another.m_x; m_y = another.m_y; } #endif private: int m_x; int m_y; }; int main(void) { Test t1(100,200); //拷贝构造函数方式一: Test t2(t1); t2.printT();//x=100,y=200 //拷贝构造函数方式二: Test t3 = t1;//依然是初始化t3时调用t3构造函数,并调用t3的拷贝构造函数 t2.printT();//x=100,y=200 //赋值操作符函数,因为构造函数是对象初始化的时候调用 Test t4; t4 = t1;//调用的不是t4拷贝函数,而是t4的赋值操作符函数 t4.printT();//x=100,y=200 return 0; }