C++面向对象高级开发_极客班_第二节课笔记
来源:互联网 发布:2017淘宝发展趋势 编辑:程序博客网 时间:2024/06/04 21:58
Big three
class 有两种 ,一种是带指针的另一种是不带指针的。不带指针的类最典型的就是complex类,而带指针的最典型的就是string类。
带指针的类有很多特性,其中最重要的就是big three.
#ifndef _MYSTRING_#define _MYSTRING_class String{public: String(const char* cstr = 0); String(const String& r); String& operator= (const String&r); ~String();private: char* m_data;};#endif
big three 就是 拷贝构造函数, 拷贝赋值函数以及析构函数。
7.1 构造函数
String::String(const char* cstr = 0) //构造函数{ if(cstr){ m_data = new char[strlen(cstr) + 1]; strcpy(m_data, cstr); } else{ m_data = new char[1]; strcpy(m_data, '\0'); }}
- 由于带指针的类,类的成员一般都是指针,只有4个字节。它指向的东西存在外部,因此要进行 构造的时候,就要思考如何把指向的外部的东西也进行构造。这样才会有上面一种很标准的写法。
注意:只有一个”\0”的为空字符串。
7.2 析构函数
String:: ~string() //析构函数{ delete []m_data;}
- 析构函数的作用在类的对象离开作用域后,会自动调用析构函数。因为如果带指针的类不写析构函数的话,那么当类执行完成后,类就要调用默认被析构掉,而如果类中的指针指向的外部空间没有被析构,就会造成内存泄露。
7.3 拷贝构造函数(copy constructor) (copy ctor)
//要多写Spring::Spring(const Spring& r) { m_data = new char[strlen(r.m_data) + 1]; strcpy(m_data, r.m_data);}
拷贝构造函数适用于
Spring s1("hello"); Spring s2(s1); // Spring s2 = s1;
这里由于 s2是第一次出现,s2用s1来进行构造,因此就会调用拷贝构造函数。而拷贝构造函数的调用,从另一个方面解释了,类的不同对象互为友元。因为,s2可以直接调用s1的private数据(兄弟之间互为友元)。
7.4 拷贝赋值函数(copy assignment constructor) (copy op=)
Spring& String::opeator = (const Spring& r){ if(this == &r) // 检测自我赋值 return *this; delete []m_data; m_data = new char[strlen(r.m_data) + 1]; strcpy(m_data, r.m_data); return *this;}
拷贝赋值函数适用于
Spring s1("hello");Spring s2;s2 = s1;
s2 已经生成,然后用s1对s2进行赋值的时候会调用拷贝赋值函数。
这个里面特别要注意自我赋值的检查。如果没有自我赋值的检查,碰到自我赋值时就会程序报错。。
0 0
- C++面向对象高级开发_极客班_第二节课笔记
- C++面向对象高级开发_极客班_第一节课笔记
- C++面向对象高级开发_极客班_第一节课笔记_section2
- C++面向对象高级开发_极客班_第一节课笔记_section3
- 【面向对象(高级)】_包装类笔记
- 【面向对象(高级)】_包装类笔记
- 黑马程序员_笔记五_面向对象(高级)
- 〖面向对象(高级)〗_实例分析:宠物商店笔记
- 【面向对象(高级)】_匿名内部类笔记
- 〖面向对象(高级)〗_实例分析:宠物商店笔记
- 【面向对象(高级)】_匿名内部类笔记
- Geekband_C++面向对象高级编程_第三周学习笔记
- Geekband_C++面向对象高级编程_第五周学习笔记
- Geekband_C++面向对象高级编程_第六周学习笔记
- 黑马程序员_笔记六_面向对象(高级)---抽象类
- java基础_面向对象高级特性
- C++_面向对象程序设计基本概念
- Objective-c语言_面向对象(封装)
- 每天半小时学英语
- Java异常处理(二)
- 每天一点python——类
- Python爬虫笔记一
- 什么是 未定义行为
- C++面向对象高级开发_极客班_第二节课笔记
- 三.指南针和磁力计
- 图灵测试
- Gradle学习手册
- if
- hdu 2037 今年暑假不ac(简单贪心)
- Java实战-山寨QQ
- signal(SIGPIPE, SIG_IGN)
- iso科大讯飞广告dsk