网站建设wix帝国cms能做手机网站吗
news/
2025/10/2 9:42:03/
文章来源:
网站建设wix,帝国cms能做手机网站吗,免费建网站软件哪个好,网站制作排名优化1、拷贝构造函数
1.1 什么是拷贝构造函数
拷贝构造函数是一种构造函数#xff0c;它的功能是创建新对象。也就是说对象还没生成#xff0c;这时利用另一个对象的拷贝来生成新的对象。
class MyDemo {
public:// 默认构造函数MyDemo(){}// 拷贝构造函数MyDemo(const MyDemo…1、拷贝构造函数
1.1 什么是拷贝构造函数
拷贝构造函数是一种构造函数它的功能是创建新对象。也就是说对象还没生成这时利用另一个对象的拷贝来生成新的对象。
class MyDemo {
public:// 默认构造函数MyDemo(){}// 拷贝构造函数MyDemo(const MyDemo _demo) {cout copy constructor is called endl;}
};int main()
{MyDemo demoA;MyDemo demoB demoA;return 0;
}
例子中的MyDemo demoB demoA; 语句调用的就是拷贝构造函数。
1.2、默认拷贝构造函数生成规则
1包含一个类类型的成员变量且成员变量所属的类有拷贝构造函数。
2其父类有拷贝构造函数。
3类有虚函数。
4类继承虚基类。
保证类对象的完整性
1.3 用到拷贝构造函数的3种场景
1用 号直接赋值
int main()
{MyDemo demoA;MyDemo demoB demoA;return 0;
}
2函数参数传递
所以拷贝构造函数必须以引用的方式传递参数。这是因为在值传递的方式传递给一个函数的时候会调用拷贝构造函数生成函数的实参。如果拷贝构造函数的参数仍然是以值的方式就会无限循环的调用下去直到函数的栈溢出。
void test(MyDemo _demo){ }int main()
{MyDemo demoA;MyDemo demoB;demoB.test(demoA);return 0;
}
3函数返回值
MyDemo getDemo() {MyDemo demo;return demo;
}int main()
{MyDemo demoA;demoA.getDemo();return 0;
}
4用花括号列表初始化一个数组中的元素
int main()
{MyDemo demoA;MyDemo demoArr { demoA };return 0;
}
5标准库容器调用insert或push添加成员时
2、赋值运算符
当对象都已经生成把另一个对象赋值给这个对象时会调用赋值运算符。
class MyDemo {
public:// 默认构造函数MyDemo(){}// 拷贝构造函数MyDemo(const MyDemo _demo) {cout copy constructor is called endl;}// 赋值运算符MyDemo operator (const MyDemo _demo) {cout operator is called endl;return *this;}
};int main()
{MyDemo demoA;MyDemo demoB;demoB demoA;return 0;
}
调用的是拷贝构造函数还是赋值运算符主要是看是否有新的对象产生。如果产生了新的对象那调用的就是拷贝构造函数如果没有那就是对已有的对象赋值调用的是赋值运算符。
3、浅拷贝和深拷贝
3.1 浅拷贝
当一个类中有指针变量时如果只拷贝了指针的值而指针所指向的地址并没有拷贝过来这种拷贝就叫做浅拷贝。
class MyDemo {
public:MyDemo() {pm_i new int(3);}~MyDemo() {delete pm_i;}int* pm_i;
};int main()
{MyDemo demoA;MyDemo demoB(demoA);return 0;
}
运行上面的代码发现会报错。为什么呢
因为对象demoB和demoA的指针pm_i都指向了同一个地址这样的话指针pm_i所指向的地址会被delete两次所以就会报错。 3.2 深拷贝
当类含有指针变量时在拷贝构造函数中应该为指针变量重新申请一块内存空间并把相应的值拷贝到该内存中这种拷贝就叫深拷贝。
MyDemo(const MyDemo _demo) {pm_i new int(5);memcpy(pm_i, _demo.pm_i, sizeof(int));
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924757.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!