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. HDU 4497 GCD and LCM(分解质因子+排列组合)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...

  2. C part 1 -- 指令篇

    Windows系统的cmd(command命令行工具): Shutdown -s -t 600:表示600秒后自动关机 Shutdown -a :可取消定时关机 Shutdown -r -t 600: ...

  3. LintCode-最长公共子串

    题目描述: 给出两个字符串,找到最长公共子串,并返回其长度. 注意事项 子串的字符应该连续的出现在原字符串中,这与子序列有所不同. 样例 给出A=“ABCD”,B=“CBCE”,返回 2 public ...

  4. 手机SIM卡知识大科普

    SIM卡 SIM卡是(Subscriber Identity Module 客户识别模块)的缩写,也称为智能卡.用户身份识别卡,GSM数字移动电话机必须装上此卡方能使用.它在一电脑芯片上存储了数字移动 ...

  5. Beat It

    They Told Him他们告诉他: Don't You Ever Come Around Here “你胆敢再来? Don't Wanna See Your Face, 不想再见你, You Be ...

  6. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

  7. HDU 3328 Flipper

    题解:直接建n个栈,模拟过程即可…… #include <cstdio> #include <cstring> #include <stack> using nam ...

  8. Python生成随机数的方法

    这篇文章主要介绍了Python生成随机数的方法,有需要的朋友可以参考一下 如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与 ...

  9. 浅谈PHP技术应用

    序号:1210-41 黑龙江省高等教育自学考试 本科毕业论文 题    目    浅谈PHP技术 学员姓名    夏滟 专    业    计算机及应用 准考证号    010311192585 指导 ...

  10. Android中图片处理相关问题

    在Android的开发中,我们经常回去处理一些图片相关的问题,比如当加载图片到内存中产生的OOM(OutOfMemory)异常.图片加载到内存中占多大内存的问题.jpg png两种常见的图片的原理及区 ...