C++ Primer 读书笔记 Charpter 12 类
2010-08-20 23:50
155 查看
类就是定义了一个新的类型和新的作用域,基本思想是数据抽象和封装
数据抽象:接口与实现分离
封装:将低层次的元素组合起来形成新的、高层次实体
优点:
避免类内部出现无意的、可能破坏对象状态的用户级错误。
随时间推移可以根据需求改变或曲线报告来完善类实现。
在类内部定义的函数,默认为inline,inline函数定义必须放在调用该函数的每个源文件可见的,即应放在头文件中。
this指针
非const函数中,this是const指针,可以改变this所指向的值,不能改变this所保存的地址
const函数中,this的类型是指向const类型的const指针。
不能从const函数返回指向类对象的普通引用,只能返回*this作为一个const引用
基于const的重载:定义两个操作,一个是const,另一个不是const。const对象只能使用const函数,不是const的对象可以使用任何一个,但非const版本是一个更好的匹配。
类成员定义的名字查找顺序:函数局部作用域=>所有类成员的声明=>在此函数定义值钱的作用域中出现的声明
全局作用域 ::name
构造函数:
const构造函数是不必要的
构造函数初始化式:item::item(const int & value):isbn(value){}
内置或复合类型的成员的初始值依赖于对象的作用域:在局部作用域的这些成员不被初始化,在全局作用域的被初始化为0;
建议使用构造函数初始化列表:必须对任何const或引用类型以及没有默认构造函数的类类型的任何成员使用初始化式
推荐按照与成员声明一致的次序编写构造函数,避免使用成员来初始化其他成员,
默认实参:
默认构造函数:只有一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数
若包含内置或复合类型成员,则应该定义自己的构造函数
推荐定义一个默认构造函数
explicit:将构造函数声明为explicit,防止使用构造函数的时候进行隐式转换
友元:允许一个类将对其非public成员的访问权授予指定的函数或类
通常将友元声明成组的放在类定义的开始或结尾
static类成员
优点:
在类的作用域内,避免与其他类的成员或全局对象名字冲突
实施封装,可以是private对象
代码意图清晰
static函数没有this指针
static数据成员必须在类定义体的外部定义(正好一次)
应在定义时进行初始化,因为static成员不通过构造函数初始化。
在定义时不能标示为static,static关键字只能用于类定义内部的声明。
整形const static可以在类的定义体中进行初始化,但仍然需要在类的定义体之外进行定义
static成员不是对象的组成部分
数据抽象:接口与实现分离
封装:将低层次的元素组合起来形成新的、高层次实体
优点:
避免类内部出现无意的、可能破坏对象状态的用户级错误。
随时间推移可以根据需求改变或曲线报告来完善类实现。
在类内部定义的函数,默认为inline,inline函数定义必须放在调用该函数的每个源文件可见的,即应放在头文件中。
this指针
非const函数中,this是const指针,可以改变this所指向的值,不能改变this所保存的地址
const函数中,this的类型是指向const类型的const指针。
不能从const函数返回指向类对象的普通引用,只能返回*this作为一个const引用
基于const的重载:定义两个操作,一个是const,另一个不是const。const对象只能使用const函数,不是const的对象可以使用任何一个,但非const版本是一个更好的匹配。
类成员定义的名字查找顺序:函数局部作用域=>所有类成员的声明=>在此函数定义值钱的作用域中出现的声明
全局作用域 ::name
构造函数:
const构造函数是不必要的
构造函数初始化式:item::item(const int & value):isbn(value){}
内置或复合类型的成员的初始值依赖于对象的作用域:在局部作用域的这些成员不被初始化,在全局作用域的被初始化为0;
建议使用构造函数初始化列表:必须对任何const或引用类型以及没有默认构造函数的类类型的任何成员使用初始化式
推荐按照与成员声明一致的次序编写构造函数,避免使用成员来初始化其他成员,
class X { int i; int j; public: X(int val):j(val),i(j){} //runtime error, i is initialized before j }
默认实参:
class Sales_item { public: Sales_item(const string& book=""); } Sales_item empty; Sales_item pr("222222");
默认构造函数:只有一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数
若包含内置或复合类型成员,则应该定义自己的构造函数
推荐定义一个默认构造函数
explicit:将构造函数声明为explicit,防止使用构造函数的时候进行隐式转换
友元:允许一个类将对其非public成员的访问权授予指定的函数或类
通常将友元声明成组的放在类定义的开始或结尾
static类成员
优点:
在类的作用域内,避免与其他类的成员或全局对象名字冲突
实施封装,可以是private对象
代码意图清晰
static函数没有this指针
static数据成员必须在类定义体的外部定义(正好一次)
应在定义时进行初始化,因为static成员不通过构造函数初始化。
在定义时不能标示为static,static关键字只能用于类定义内部的声明。
整形const static可以在类的定义体中进行初始化,但仍然需要在类的定义体之外进行定义
static成员不是对象的组成部分
相关文章推荐
- 《c++ primer》读书笔记12
- C++ Primer 读书笔记 Charpter 13 复制控制
- C++ Primer 读书笔记 Charpter 14 重载操作符和转换
- 读书笔记之:C++ Primer (第4版)及习题(ch12-ch18)
- C++ Primer 读书笔记 Charpter 10 关联容器
- C++ Primer 读书笔记 Charpter 11 泛型算法
- 读书笔记:C++ Primer系列(12)—— 类型转换
- 《Android群英传》读书笔记(12)第十二章:Android 5.X新特性详解
- 读书笔记之《C++ Primer》
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(12)--- 策略化加锁
- C++ Primer 读书笔记 – 第三章
- 《C++ Primer 4th》读书笔记 第10章-关联容器
- Charpter 12
- 读书笔记:C++ primer 5th edition--chapter9.顺序容器
- 读书笔记《C++ Primer》第五版——第七章 类
- 读书笔记:C++ primer 5th edition--chapter18.用于大型程序的工具
- Unix编程要学习的内容(2)《精通Unix下C语言与项目实践》读书笔记(12)
- 读书笔记:C++ Primer系列(1)—— 开篇
- 《c++ primer》读书笔记3
- 《C++ Primer》读书笔记-第二章 04 指针和引用