浅拷贝(在进行其中一个对象的运算时开辟新的空间)
来源:互联网 发布:照片真假辨别软件 编辑:程序博客网 时间:2024/05/02 06:46
如图变换,且对于指向同一空间的String进行计数
代码如下:
#include <iostream>using namespace std;class String; //提前声明class String_rep //定义类String_rep{friend class String; //友元public:String_rep(const char *str=NULL):use_count(0) //构造{if(str == NULL){m_data = new char[1];m_data[0] = '\0';}else{m_data = new char[strlen(str)+1];strcpy(m_data,str);}}String_rep(const String_rep &r); //拷贝构造String_rep& operator=(const String_rep &r); //赋值函数~String_rep(){delete []m_data;}public:void increment() //计数器加一{use_count++;}void decrement() //若计数器为零则释放{if(--use_count == 0){delete this; }}int get_use_count()const //计数器{return use_count;}void Show()const //显示{cout<<m_data<<endl;}private: //私有成员char *m_data;long use_count;};class String //定义类String{public:String(const char *str=NULL):rep(new String_rep(str)) //构造{rep->increment();}String(const String &s):rep(s.rep) //拷贝构造{rep->increment();}String& operator=(const String &s) //赋值函数{if(this != &s) //若为同一字符串{rep->decrement();rep = s.rep;rep->increment();}return *this; //反之}~String() //析构{rep->decrement();}public:void Show()const //显示{rep->Show();}void to_upper() //变为大写{String_rep *new_rep = new String_rep(rep->m_data); //新的指针rep->decrement(); //原计数器减一rep = new_rep; //指向新的空间rep->increment(); //现计数器加一char *pch = rep->m_data; //确定指向while(*pch != '\0') //变成大写{*pch -= 32;pch++;}}private:String_rep *rep;//句柄};void main(){String s1("abcd");String s2 = s1;String s3;s3 = s2;s1.to_upper();//将s1的小写变大写s1.Show(); //ABCDs2.Show(); //abcds3.Show(); //abcd}
如果代码有不足的地方希望大家指出~谢谢。
0 0
- 浅拷贝(在进行其中一个对象的运算时开辟新的空间)
- 传入一个数组进行排列,奇数在前升序,偶数在后降序,在程序执行中不能开辟新数组空间
- 为何在此开辟新的据点?
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝(我又对其中一点点错误进行了一点修改)
- 根据对象的其中一个字段进行排序
- 开辟新的生活
- 开辟新的天地
- N*N矩阵的旋转 不开辟新空间
- 反转链表(在原链表进行操作,不开辟新空间. O(N)
- 合并两个排序的链表使之依然有序(不开辟新空间在原链表上操作的非递归版本)
- 合并两个有序的链表使新链表依然有序(不开辟新空间,在原链表上操作。 递归版本)
- 字符串替换(新开辟空间)
- Android开辟一个新的线程简单介绍(Thread,Handler)
- 拷贝构造函数,用一个对象的值初始化一个新构造的对象
- Java中的反射机制(二) 一个利用反射进行对象拷贝的例子
- Java中的反射机制(二) 一个利用反射进行对象拷贝的例子
- 开辟新战场,打造新的商业模式
- iOS_Runtime_OC对象在堆内存中开辟内存的大小
- http接口开发请求参数签名实用工具类
- Best Time to Buy and Sell Stock IV
- 二叉搜索树,B树(B-树),B+树,B*树
- xcode iOS 模拟器 textField 鼠标点击后键盘不显示
- xcode常用快捷键
- 浅拷贝(在进行其中一个对象的运算时开辟新的空间)
- Java使用反射来获取成员变量泛型信息
- 只出现一次的数
- jpa 数据库映射注解介绍
- Microsoft Macro
- Ajax 获取Map集合
- 使用python+selenium爬取学生信息并入库
- Linux skb->priority Qos
- jpa 中@ManyToMany 标签使用后,只对关联表进行删除的写法