String类的设计笔记----C++学习之路
来源:互联网 发布:js从入门到精通 编辑:程序博客网 时间:2024/06/06 14:02
1.防卫式声明
2.字符串是大小不固定的,那就是用指针来动态分配内存,用new的方式动态分配一个内存,所以在private中应该是一个char* m_data;
3.接下来准备构造函数,放在public里,构造函数与class同名。String(const char* cstr=0);给予默认值0;
4.类内带有指针,就要去考虑三个特殊函数:
拷贝构造(String (const String& str);)
拷贝赋值(String& operator=(const String& str);)
析构函数(~String();)
5.取字符串 char* get_c_str() const {return m_data;};
6.ctor:放在class本体外来写。
构造函数的步骤:分配空间,转型(编译器),传参。别忘记判断传入的是否有效。
String::String(const char* cstr = 0){ if(cstr) { m_data=new char[strlen(cstr)+1]; stcpy(m_data,cstr); } else { m_data=new char[1]; *m_data='/0'; }}7.dtor:放在本体外来写,尽量写上inline
String::~String(){ delete[] m_data;}8.copy ctor(拷贝构造)
拷贝构造就是来源端拷贝到目的端,分配空间,再拷贝,代码如下:也希望成为内敛函数,代码没加inline
String::String(const String& str){ m_data=new char[strlen(str.m_data)+1]; strcpy(m_data,str.m_data);}关于inline什么时候加,什么情况都能加,编译器会自己判断,没有不好的影响。
9.拷贝赋值
inlineString& String::operator=(const String& str){ if(this==&str) return *this; delete[] m_data; m_data=new char[strlen(str.m_data)+1]; strcpy(m_data,str.m_data); return *this;}关于拷贝赋值的返回值,为什么是String&而不是void:假设赋值语句a=b;这句话不管是String&还是void,都是没问题,但是如果是a=b=c;那么就会出错。
以及String&与&str两个&符号的含义,一个是引用,一个是取地址。在我的学习笔记有记录:指针与引用
以及良好的习惯,需要判断是否自我赋值,若没有,不仅是效率问题,也可能会出错。
阅读全文
0 0
- String类的设计笔记----C++学习之路
- C++string类学习笔记
- 【学习笔记】【C++】自己实现string类
- 学习笔记之string
- Java学习笔记之Java的String类
- Java学习笔记之String类的常用方法
- java学习笔记之String的方法
- Java学习笔记之String类
- C++之string类学习笔记
- C string 字符串 学习笔记
- String的学习笔记
- C++之string学习笔记
- python 学习笔记之string
- C++之string学习笔记
- C#学习笔记之string
- 学习笔记之String源码
- 通关!游戏设计之道的学习笔记(五)3C
- OC学习笔记之OC类的设计练习实战
- 动态规划---砝码称重问题
- NOIP普及组2009年 细胞分裂 题解
- 移动端车牌识别步骤概括为:车牌定位、车牌提取、字符识别
- runtime 创建数据模型
- flot
- String类的设计笔记----C++学习之路
- 51nod 1824(算法马拉松30)
- 在学习PHP过程中收集的网站
- 从零开始实现朴素贝叶斯分类算法(连续特征情形)
- Python--urllib3库详解1
- 集训 sum
- Spring(一)spring的原理
- 揭秘Java网络爬虫程序原理
- 中国高铁开启铁路新时代