构造函数, 拷贝构造函数, 赋值操作重载各种情况实例演示:
#include <iostream>
#include <string>
using namespace std;
void trace(string str)
{
cout << str <<endl;
}
class CTest
{
private:
int m_i;
string m_str;
public:
CTest(int i = 0, string str = "C++ Test"); //重载构造函数
CTest(CTest& test); //拷贝构造函数
~CTest(){} //析构函数
void showData();
CTest& operator=(CTest& test); //赋值函数操作符重载
};
CTest::CTest(int i, string str)
{
m_i = i;
m_str = str;
}
CTest::CTest(CTest& test)
{
this->m_i = test.m_i;
this->m_str = test.m_str;
cout << "call copy construct function" <<endl;
}
void CTest::showData()
{
cout << this->m_i <<endl;
cout << this->m_str <<endl;
}
CTest& CTest::operator=(CTest& test)
{
this->m_i = test.m_i;
this->m_str = test.m_str;
cout << "赋值操作符重载" <<endl;
return *this;
}
int main(int argc, char *argv[])
{
trace("创建CTest对象:test");
CTest test(10);
test.showData();
//CTest test2 = test; //调用到拷贝构造函数!!!, 因为有新对象创建
trace("创建CTest对象:test2");
CTest test2(20);
test2.showData();
trace("赋值test2=test");
test2 = test; //没有新对象创建, 调用的是操作符重载方法, 如果没重载=, 就是内存的简单拷贝
test2.showData();
return 0;
}