#include<iostream>
using namespace std;
class A
{
private:
int data;
public:
A()
{
cout << "默认构造函数" << endl;
}
A(int a):data(a)
{
cout << "自定义构造函数" << endl;
}
A(const A &b)
{
this->data = b.data;
cout << "拷贝构造函数" << endl;
}
A& A::operator =(const A &a);
};
/*赋值运算符要注意
1.形参要用const修饰,且为引用传递,否则会无限
2.要返回*this,否则不能连续赋值
3.要删除原有的空间,否则会内存泄漏
4.判断参数是否是自身,否则会在删除内存时候发生错误
5.判断内存是否申请成功
*/
A& A::operator=(const A &a)
{
this->data = a.data;
cout << "赋值运算符" << endl;
return *this;
}
A test(A a)
{
return a;
}
int main()
{
A a = 10;//此处调用的是自定义构造函数
cout << endl;
a=test(10);//此处只调用自定义构造函数、拷贝构造函数和赋值运算符
//函数返回时,会拷贝临时变量
cout << endl;
a=test(a);//此处调用拷贝构造函数、拷贝构造函数、赋值运算符
cout << endl;
A b(a);//此处调用拷贝构造函数
cout << endl;
A c = b;//此处调用拷贝构造函数
cout << endl;
c = b;//此处调用赋值运算符
}C++ 的构造函数,拷贝构造函数,赋值运算符
最新推荐文章于 2025-04-22 22:05:29 发布
本文详细解析了C++中自定义类的构造函数及赋值运算符重载实现过程。通过具体示例代码,展示了不同构造函数(默认构造函数、自定义构造函数、拷贝构造函数)的调用时机,并深入探讨了赋值运算符重载的注意事项与实现细节。
2837

被折叠的 条评论
为什么被折叠?



