具体看如下注释和代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Name
{
public:
Name(const char* pname)
{
size = strlen(pname);
pName = (char*)malloc(size + 1);
strcpy(pName, pname);
cout << "调用11" << endl;
}
Name(Name& obj)
{
//用obj来初始化自己
pName = (char*)malloc(obj.size + 1);
strcpy(pName, obj.pName);
size = obj.size;
cout << "调用22" << endl;
}
~Name()
{
cout << "开始析构" << endl;
if (pName != NULL)
{
free(pName);
pName = NULL;
size = 0;
}
}
void operator=(Name& obj3)
{
if (pName != NULL)
{
free(pName);
pName = NULL;
size = 0;
}
//用obj3来=自己
pName = (char*)malloc(obj3.size + 1);
strcpy(pName, obj3.pName);
size = obj3.size;
cout << "重载运算操作符" << endl;
}
protected:
private:
char* pName;
int size;
};
//对象的初始化 和 对象之间=号操作是两个不同的概念
void playObj()
{
Name obj1("obj1....."); //输出:调用11
Name obj2 = obj1; //这里调用的是拷贝构造函数,输出:调用22
Name obj3("obj3..."); //输出:调用11
//重载=号操作符
obj2 = obj3; //=号操作,输出:重载运算操作符
cout << "业务操作。。。5000" << endl;
}
void main()
{
playObj();
system("pause");
}