c++的复制构造函数,(郑莉 c++语言程序设计)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++的复制构造函数,(郑莉 c++语言程序设计),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1785字,纯文字阅读大概需要3分钟。
内容图文
1.
https://www.cnblogs.com/BlueTzar/articles/1223313.html
以上博客讲了深拷贝和浅拷贝的区别,即:
在某些状况下,类内成员变量需要动态开辟堆内存,这时实行拷贝
B=A;
A的成员指针变量有指向内存,这时复制构造函数会将B的也指向同一块内存,A销毁(比如析构)时,B里面的成员变量就成了野指针。所以默认的复制构造函数是不行的。这时就需要深拷贝。
2.何种情况下自动调用复制构造函数
1)对象以值的形式传递到函数时
2)对象以值的形式作为函数的返回值时
3)对象需以另一个对象进行初始化时,
// 4_2.cpp: 定义控制台应用程序的入口点。
//学习赋值构造函数的使用。有三种场景
//1.对象复制时
//2.函数的参数是对象,且是以值传递的形式时。
//3.函数的返回值是对象。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Point
{
public:
Point(int gX=1,int gY=2)//将此构造函数构造成内联构造函数
{
x = gX;
y = gY;
}
Point(Point &a);
int getX();
int getY();
private:
int x, y;
};
Point::Point(Point &a)
{
x = a.x+10;
y = a.y;
cout << "haha" << endl;
};
int Point::getX()
{
return x;
}
int Point::getY()
{
return y;
}
//定义一个普通函数
void func1(Point p)
{
cout << "func1's is " << p.getX() << endl;
}
//定义一个有返回值的函数
Point func2()
{
Point p(3, 4);
return p;//p是局部变量,调用结束就销毁。编译系统会创建一个临时对象,执行return时会调用复制构造函数a的值复制到临时对象去
}
int main()
{
Point p1;
//cout << "p1x is: " << p1.getX() << " yis: " << p1.getY() << endl;//1 2
Point p2 = p1;
cout << "p2_x1 is: " << p2.getX() << " yis: " << p2.getY() << endl;//11 2//第一次调用复制,加了10
p2 = func2();
cout << "p2_x2 is: " << p2.getX() << " yis: " << p2.getY() << endl;//13 4//第二次调用复制,p2被重新赋值
func1(p2); // 23//第三次,值传递形式拷贝对象,故会再次调用,得到的是p的x值,跟p2没什么关系。
cout << "p2_x3 is: " << p2.getX() << " yis: " << p2.getY() << endl;//13 4
system("pause");
return 0;
}
内容总结
以上是互联网集市为您收集整理的c++的复制构造函数,(郑莉 c++语言程序设计)全部内容,希望文章能够帮你解决c++的复制构造函数,(郑莉 c++语言程序设计)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。