C++类设计2(Class with pointer members)
二 Class with pointer members(Class String)
1. 测试代码(使用效果)
int main()
{
String s1(),
String s2("hello"); //构造函数
String s3(s1); //拷贝构造
cout << s3 << endl;
s3 = s2; //拷贝赋值
cout << s3 << endl;
}
2 Big three(三种特殊函数)
class String
{
public:
String(const char* cstr = );
String(const String& str); //参数为相同类型对象的引用,拷贝构造
String& operator=(const String& str); //拷贝赋值
~String() //析构函数
char* get_c_str() const{
return m_data;
}
private:
char* m_data;
};
2.1 ctor & dtor(构造与析构)
inline
String::String(const char* cstr = )
{
if(cstr){
m_data = new char[strlen(cstr)+];
strcpy(m_data,cstr);
}
else{ //未指定长度
m_data = new char[];
*m_data = '\0';
}
} inline
String::~String()
{
delete[] m_data;
}
2.2 Class with pointer members必须有copy ctor(拷贝构造)和copy op(拷贝赋值)
深拷贝与浅拷贝

深拷贝:
inline
String::String(const String& str){
m_data = new char[strlen(str.m_data) + ]; //直接取得另一个对象的private数据
//可用友元解释
strcpy(m_data, str.m_data);
}
拷贝赋值函数:
思路:若右边拷贝到左边,步骤为 清空左边;分配与右边相同空间;完成拷贝。
inline
String& String::operator=(const String& str){
if(this == &str){ //检测自我赋值,不仅仅是效率问题
return *this; // 如果不检验的话,可能造成行为未定义,见下图解释
}
delete[] m_data; // 清除左边
m_data = new char[ strlen(str.m_data) + ];//开辟空间
strcpy(m_data, str.m_data); //完成拷贝
return *this
}

总结:有指针变量的类,一定要重新其拷贝构造,拷贝赋值和析构函数!
C++类设计2(Class with pointer members)的更多相关文章
- iOS控制器之基类设计
题记 在进入新公司后.经过这一个月的重构项目,终于把项目做到了个人相对满意的程度(还有一种不满意的叫老板的需求,提过多次意见也没用= =!).在这次重构中按照以前的思路设计出了个人觉得比较适用的一个基 ...
- 水果项目第1集-想法>需求->功能->数据库设计->类设计
懒,懒人,我是个懒人. 懒人想做点事,总是拖拖拉拉,迟迟没有开始. 很久很久以前,就想做属于自己的产品,但是至今还没有一个属于自己的产品. 两年前,终于想好,要做一个网上卖水果的系统,手机上点点,水果 ...
- [theWord] 一种英文字典的基类设计
theWord --- 一种英文字典的基类设计 使用场景 想写一个应用,来记录自己背单词时候,对每个单词的记忆状况之类的东西.至于为什么做这个,试过了一些背单词软件,并不觉得好用,自己做一个吧. 那么 ...
- YTU 2602: 熟悉题型——类设计( 矩形类定义【C++】)
2602: 熟悉题型--类设计( 矩形类定义[C++]) 时间限制: 1 Sec 内存限制: 128 MB 提交: 183 解决: 119 题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标 ...
- Java 类设计技巧
摘自<Java核心技术>卷I:基础知识 p140 第4章对象与类 - 类设计技巧 1)一定将数据设计为私有. 最重要的是:绝对不要破坏封装性.有时候,需要编写一个访问器方法或更改器方法,但 ...
- 字体图标,盒子显隐,overflow属性,伪类设计边框,盒子阴影2d形变
字体图标 ''' fa框架: http://fontawesome.dashgame.com/ 下载 => 引入css文件 引入字体图标库 <link rel="styleshe ...
- Java11-java基础语法(十)类设计综合案例
Java11-java语法基础(十)类设计综合案例 一.类综合设计方法 1.类设计步骤 (1)分析数据成员 (2)分析成员方法和构造方法 (3)画出类图 (4)编码测试 2.具体问题 1)分析数据成员 ...
- JFreeChart绘制XY折线图(工具类设计)
准备用Java写通信的仿真平台作为毕业设计,相比matlab绘图,Java绘图需要自己去写很多工具类,博主在这采用了JFreeChart的开源解决方案,摸索着自己写了一个XY折线图工具类,话不多说贴源 ...
- iOS 基于MVC设计模式的基类设计
iOS 基于MVC设计模式的基类设计 https://www.jianshu.com/p/3b580ffdae00
随机推荐
- jszs 历史管理
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- DataGrid Column Group (合并表头)
<thead> <tr> <th colspan=">swjg</th> <th colspan=">swbm</ ...
- 【转】B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- Linux下的sed流编辑器命令详解
sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...
- Scene View Navigation
[Scene View Navigation] Hold the right mouse button to enter Flythrough mode. This turns your mouse ...
- SpriteKit
[SpriteKit] Sprite Kit provides a graphics rendering and animation infrastructure that you can use t ...
- LeetCode104: Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...
- I/O小总结
//判断不存在就创建目录 ,然后拷贝文件 DirectoryInfo di = null; if (!Directory.Exists(n.Attribute("value").V ...
- ASP.NET的分页方法(二)
第二讲主要使用到了常用的分页控件aspnetpager,这里对他就行一个简单的应用,具体大家可以到杨涛的博客上去寻找相关的DLL, 首先要先引用AspNetPager.dll,然后把这个DLL同时添加 ...
- HDU3635Dragon Balls(并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=3635 题目意思是说n个球在n个城市. 每次操作把编号i的球所在的城市的所有的求全部一道另一城市B 每次询问访问编 ...