c++编译器至少给一个类添加4个函数
-
默认构造函数(无参,函数体为空)
-
默认析构函数(无参,函数体为空)
-
默认拷贝构造函数,对属性进行值拷贝
-
赋值运算符 operator=, 对属性进行值拷贝
如果类中有属性指向堆区,做赋值操作时会出现深浅拷贝问题,通过重载赋值运算符,可以在堆区开辟新的区域实现深拷贝,而不是简单的赋值操作
等号运算符重载:
#include <iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
m_Age = new int(age);
}
Person& operator=(Person& p)
{
if (m_Age != NULL)
{
delete m_Age;
m_Age = NULL;
}
m_Age = new int(*p.m_Age);
return p;
}
int* m_Age;
};
void test()
{
Person p1(18);
Person p2(20);
Person p3(28);
p3 = p2 = p1;
cout << *p1.m_Age << endl;
cout << *p2.m_Age << endl;
cout << *p3.m_Age << endl;
}
int main()
{
test();
system("pause");
return 0;
}
自增和左移运算符重载:
#include <iostream>
using namespace std;
class myInt
{
friend ostream& operator<<(ostream& cout, myInt myint);
public:
myInt()
{
m_Int = 0;
}
//前置++
myInt& operator++()
{
m_Int++;
return *this;
}
//后置++
myInt operator++(int)
{
myInt temp = *this;
m_Int++;
return temp;
}
private:
int m_Int;
};
ostream& operator<<(ostream& cout, myInt myint)
{
cout << myint.m_Int;
return cout;
}
int main()
{
myInt a;
cout << a << endl;
cout << ++a << endl;
cout << a++ << endl;
cout << a << endl;
system("pause");
return 0;
}