1. C++默认实现了 = 号赋值;operator=只要将一个对象的内容的内容逐位复制给另外一个对象即可。

2. C++默认实现了复制构造函数;同样,只要将一个对象的内容的内容逐位复制给另外一个对象即可。

3. 默认实现的复制构造函数属于浅拷贝。当对象里面有指针的时候,第二个对象的指针并没有重新分配空间,这时如果析构函数delete了这个指针,会造成重复delete。

这个时候,要自己实现复制构造函数,在构造函数中new重新分配空间,并可用memcpy手动复制该空间的值。

4. = 号操作符也可以自己实现;

使用默认的 = 操作符以及默认的复制构造函数的例子:

#include <iostream>
using namespace std; class Demo
{
public:
int x ;
int y ;
}; int main()
{
Demo demo1;
demo1.x = ;
demo1.y = ; Demo demo2;
demo2 = demo1;//默认的等号赋值,属于浅拷贝。但对象成员没有指针变量时,无需顾虑。
cout<<"demo2-----"<<demo2.x<<endl;
cout<<"demo2-----"<<demo2.y<<endl; Demo demo3(demo1);//默认的复制构造函数,属于浅拷贝。可以自己实现,Demo::Demo(Demo& val);
    cout<<"demo3-----"<<demo3.x<<endl;
cout<<"demo3-----"<<demo3.y<<endl; while();
return ;
} /**结果:

demo2 x-----11
demo2 y-----111
demo3 x-----11
demo3 y-----111

*/

下面是自己实现复制构造函数的例子:

#include <iostream>
using namespace std; class Demo
{
public:
int x ;
int y ;
Demo();
Demo(Demo& val);
}; Demo::Demo()
{ }
Demo::Demo(Demo& val) //自己实现拷贝构造函数
{
this->x = val.x +;//故意+1以示区分
this->y = val.y +;
} int main()
{
Demo demo1;
demo1.x = ;
demo1.y = ; Demo demo2;
demo2 = demo1;//等号赋值,属于浅拷贝
cout<<"demo2 x-----"<<demo2.x<<endl;
cout<<"demo2 y-----"<<demo2.y<<endl; Demo demo3(demo1);//
cout<<"demo3 x-----"<<demo3.x<<endl;
cout<<"demo3 y-----"<<demo3.y<<endl; while();
return ;
}
/*测试结果:
demo2 x-----11
demo2 y-----111
demo3 x-----12
demo3 y-----112
*/

C++,对象的 =赋值 以及 复制构造函数赋值的更多相关文章

  1. 析构函数-复制构造函数-赋值操作符重载-默认构造函数<代码解析>

    通过下面primer中的一道习题,可以更深刻的了解,析构函数,复制构造函数,赋值操作符重载,默认构造函数的使用. 但是我的结果与primer习题解答里面的并不相同,可能是编译器不同的原因导致. // ...

  2. 赋值、复制构造函数和构造函数 & 异常安全的赋值

    异常安全的赋值 需要注意,复制赋值和复制构造,相兼容. 赋值时候,要带上自检查.

  3. C++函数返回值为类对象但未调用复制构造函数

    参考资料:https://blog.csdn.net/sxhelijian/article/details/50977946 不要迷信书本,要学会自己调试程序.

  4. C++学习基础六——复制构造函数和赋值操作符

    1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...

  5. 赋值操作符、复制构造函数、析构函数、static成员练习

    /** * 定义一个Employee类,包含雇员名字和一个唯一的雇员标识,为该类定义默认构造函数和参数为表示 * 雇员名字的string构造函数.如果该类需要复制构造函数或赋值操作符,实现这些函数 * ...

  6. C++ 对象的赋值和复制 基本的

    对象的赋值 如果对一个类定义了两个或多个对象,则这些对象之间是可以进行赋值,或者说,一个对象的值可以赋值给另一个同类的对象.这里所指的值是指对象中所有数       据的成员的值.对象之间进行赋值是“ ...

  7. C++(二十六) — 构造函数、析构函数、对象数组、复制构造函数

    1.构造函数 (1)每个类都要定义它自己的构造函数和析构函数,是类的成员函数. 特点:名称与类名相同:没有返回值:一定是共有函数,可以直接访问类内所有成员函数:可以带默认形参,可以重载: class ...

  8. C++ 复制构造函数

    C++类的设计中,如果某些函数没有显式定义,C++会自动生成,复制构造函数便是其中之一,其他的还有默认构造函数.赋值操作符.默认析构函数.地址操作符.一个类的复制构造函数的原型一般为: Class_n ...

  9. C++ 类 复制构造函数 The Copy Constructor

    一.复制构造函数的定义 复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性.复制构造函数创建一个新的对象,作为另一个对象的拷贝.复制构造函数只含有一个形参,而且其形参为本类对象的引用.复制构 ...

随机推荐

  1. 【转】OpenCV与CxImage转换(IplImage)、IplImage QImage Mat 格式互转

    最近由于在项目中用到了Opencv库,但是为了更好的显示图像还是使用了Cximage库,它可以快捷地存取.显示.转换各种图像.Opencv库用于高级图像处理与识别.为了使Cximage图像与Openc ...

  2. 关于playframework2.5

    加入了很多新东西: 1.用akka streams 替换了大部分 iteratee-based async io,当然还有一些模块在用iteratees 2.java 的一些API 做了调整升级,以及 ...

  3. mapper分页排序指定字段查询模板

    StudentQuery: package Student; import java.util.ArrayList; import java.util.List; public class Stude ...

  4. 如何使用 Barracuda 防火墙设置/保护 Azure 应用程序

     如果某企业在 Windows Azure 上托管某个应用程序,该应用程序会在某个特定时间暴露到 Internet,以用于商业用途.公共 Internet 带来 客户的同时也带来了攻击者. Tim ...

  5. 简单JSONP跨域请求

    JSONP原理:利用<script>标签的src属性实现跨域的请求.可在URL中提供回调函数的名字.后台进过处理后将数据以回调函数参数的形式返回. demo:JSONP请求不同端口的数据 ...

  6. .NET使用NPOI组件将数据导出Excel

    .NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com/ ...

  7. IOS 指纹识别的简单使用

    首先导入LocalAuthentication框架 然后导入头文件 #import <LocalAuthentication/LAPublicDefines.h> - (void)begi ...

  8. 「OC」block 和 protocol

    一.block   (一)简介 block 是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,block 可以在任何时候执行.在多线程.异步任务.集合遍历.集合排序.动 ...

  9. mysql innodb存储引擎的聚集索引

    InnoDB聚集索引 MySQL有没有支持聚集索引,取决于采用哪种存储引擎. MySQL InnoDB一定会建立聚集索引,所谓聚集,指实际数据行和相关的键值保存在一块,这也决定了一个表只能有一个聚集索 ...

  10. [置顶] P2P之我见,关于打洞的学问-------开篇

    最近忙项目,有点累,无暇顾急博客,4月份本来想写写流媒体的文章,结果回家休了两个月回深圳后,接了P2P的项目,那就开始P2P吧. P2P起源于美国大学生Shawn Fanning 写的一个分享软件Na ...