C++ 进阶5 拷贝构造 深度复制 运算符重载 20131026

例子: 运行环境是G++ 编译,

/*

* main.cpp

*

*  Created on: 2013年10月26日

*      Author: yangtfei

*/

#include <iostream>

#include <cstring>

#include <stdlib.h>

#include <stdio.h>

using namespace std;

class Base{

private:

int val;

char * str;

public:

Base(const char * str, const int v){

this->val = v;

int len  = strlen(str);

this->str = new char[len+1];

strcpy(this->str,str);

}

Base(const Base & b){

this->val = b.val;

int len  = strlen(b.str);

this->str = new char[len+1];

strcpy(str, b.str);

}

Base& operator=(const Base& b){

this->val = b.val;

int len =  strlen(b.str);

this->str = new char[len+1];

strcpy(str,b.str);

return *this;

}

~Base(){

delete this->str;

cout << "Base::~Base()" << endl;

}

void printInfo(){

cout << "val:" << this->val << ", name:" << this->str << endl;

}

void setName(const char * name){

if(this->str!= NULL){

delete str;

str = NULL;

}

int len  = strlen(name);

str = new char[len+1];

strcpy(str,name);

}

};

void getMemory(char ** p , int num){

*p =(char*) malloc(num);

}

int main(){

Base b("yang",10);

Base c = b;

Base d (b);

b.printInfo();

c.printInfo();

d.printInfo();

b.setName("teng");

c.setName("fei");

b.printInfo();

c.printInfo();

d.printInfo();

return 0;

}

C++ 进阶5 拷贝构造 深度复制 运算符重载的更多相关文章

  1. C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字

    原文地址:https://blog.csdn.net/shine_journey/article/details/53081523 1.在C++编码过程中,类的创建十分频繁. 简单的功能,当然不用考虑 ...

  2. [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2

    接上[No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1 对象复制 有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充,又或者创建对象需要读取硬 ...

  3. 拷贝构造和拷贝赋值、静态成员(static)、成员指针、操作符重载(day06)

    十七 拷贝构造和拷贝赋值 浅拷贝和深拷贝 )如果一个类中包含指针形式的成员变量,缺省的拷贝构造函数只是复制了指针变量的本身,而没有复制指针所指向的内容,这种拷贝方式称为浅拷贝. )浅拷贝将导致不同对象 ...

  4. 构造函数和初始化表、this指针与常函数、析构函数、拷贝构造与拷贝赋值(day05)

    十四 构造函数和初始化表 ... 初始化表 )语法形式 class 类名{ 类名(形参表):成员变量1(初值),...{} }; )必须要使用初始化表的场景 -->如果有类 类型的成员变量,而该 ...

  5. C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用

    一. 构造函数是干什么的   class Counter   {   public:            // 类Counter的构造函数            // 特点:以类名作为函数名,无返回 ...

  6. 使用结构化克隆在 JavaScript 中进行深度复制

    在很长一段时间内,您不得不求助于变通方法和库来创建 JavaScript 值的深层副本.现在js提供 「structuredClone()」 一个用于深度复制的内置函数. 浏览器支持: 浅拷贝 在 J ...

  7. 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】

    一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...

  8. 转载---Java集合对象的深度复制与普通复制

    原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复 ...

  9. 【转】C++的拷贝构造函数深度解读,值得一看

    建议看原帖  地址:http://blog.csdn.net/lwbeyond/article/details/6202256 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很 ...

随机推荐

  1. pc端样式初始化

    pc端样式初始化: /* http://meyerweb.com/eric/tools/css/reset/ /* http://meyerweb.com/eric/tools/css/reset/ ...

  2. CSS中定义a:link、a:visited、a:hover、a:active顺序

    a :link.a:hover.a:visited这几个元素,定义CSS时候的顺序不同,也会直接导致链接显示的效果不同. eg:让未访问链接颜色为red,活动链接为yellow,已访问链接为green ...

  3. try cath

    用try cath 的缺点? 举例: 一个程序 有3层.基类层,中间层,和  使用层. 在 基类层 使用 try cath 如果发生 异常,将会 一层一层 冒泡到 使用层 并弹出报错信息:效率 大大降 ...

  4. Printf的缓冲机制

    转:https://blog.csdn.net/qq_25424545/article/details/78772959 今天用fork()写程序时候,突然发现自己对Printf的缓冲机制还是有些不够 ...

  5. nginx 代理服务器配置双向证书验证

    生成证书链 用脚本生成一个根证书, 一个中间证书(intermediate), 三个客户端证书. 脚本来源于(有修改)https://stackoverflow.com/que... 中间证书的域名为 ...

  6. [Hdu6315]Naive Operations

    题意:给定一个初始数组b和一个初始值全部为0的数组a,每次操作可以在给定的区间(l,r)内让a[i](l=<i<=r)加一,或者查询区间区间(l,r)中a[i]/b[i](l=<i& ...

  7. HIVE分组排序问题

    答案: hive> select *,row_number() over (partition by product_no order by start_time desc) from tabl ...

  8. Android studio 2.3安装遇到的问题

    我的安装系统环境:windows 10+jdk1.8.0_111 . 1.在安装Android studio 2.3之前,请安装最新的java jdk.Android studio的安装包里是不包含j ...

  9. java.lang.IllegalArgumentException的解决方法

    java.lang.IllegalArgumentException这个错误基本上就是jdk版本的问题 把jdk1.8换成jdk1.7就可以了 这里可以设置jdk最低版本 这里默认要选择jdk1.7 ...

  10. Linux 安装rabbitmq 遇到的一些问题

    Linux下防火墙开启相关端口及查看已开启端口 https://www.cnblogs.com/pizitai/p/6518987.htmlhttps://www.cnblogs.com/blog-y ...