11.拷贝构造函数
#include <iostream>
using namespace std;
class Maker
{
private:
int a;
public:
Maker()
{
cout << "无参构造函数" << endl;
a = 20;
}
//拷贝构造函数
Maker(const Maker &m)
{
cout << "拷贝构造函数" << endl;
a = m.a;
}
//打印函数
void printfMaker()
{
cout << "a = " << a << endl;
}
};
void test01()
{
Maker m1;
m1.printfMaker();
//用一个已有的对象去初始化另一个对象
Maker m2(m1);
m2.printfMaker();
}
//2.编译器提供了默认的拷贝构造函数
class Maker2
{
private:
int a;
public:
Maker2()
{
cout << "无参构造函数" << endl;
a = 20;
}
//编译器提供了默认的拷贝构造函数
//Maker2(const Maker2 &m)
//{
// //默认拷贝构造函数进行了成员变量的简单拷贝
// a = m.a;
//}
//打印函数
void printfMaker2()
{
cout << "a = " << a << endl;
}
};
void test02()
{
Maker2 m1;
m1.printfMaker2();
Maker2 m2(m1);
m2.printfMaker2();
}
//3.拷贝构造函数中形参要用引用
class Maker3
{
private:
int ma;
public:
Maker3(int Ma)
{
cout << "有参构造函数" << endl;
ma = Ma;
}
Maker3(const Maker3 &m)
{
cout << "拷贝构造函数" << endl;
}
};
void test03()
{
Maker3 m1(10);//调用有参构造
Maker3 m2(m1);//调用拷贝构造
Maker3 m3 = m1;//调用拷贝构造
//如果拷贝构造函数中的形参不是引用
/*
Maker3(const Maker3 m)//const Maker3 m = m1; const Maker3 m(m1)
{
cout << "拷贝构造函数" << endl;
}
1.Maker3 m2(m1);
2.const Maker3 m = m1;
3.const Maker3 m(m1);
4.const Maker3 m = m1;
5.进入死循环
*/
}
int main()
{
test01();
system("pause");
return EXIT_SUCCESS;
}
参考资料
参考资料来源于黑马程序员等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)