《C++primer》读书笔记一
2016-04-13 09:47
274 查看
数据抽象和封装的两个优点:
1.避免类内部出现无意的,可能破坏对象状态的用户级错误。
2.随时间的推移,可以根据需求改变或缺陷报告来完善类实现。无需改变用户及代码。
从const成员函数返回*this
不能从const成员函数返回指向类对象的普通引用。const成员函数只能返回*this作为一个const引用。
12.3类作用域
在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符 .或->来访问。操作符左边分别是一个类对象或一个类对象的指针。
必须在类中先定义类型名字,才能将它们用作数据成员的类型,或者成员函数的返回类型或形参类型。
12.4构造函数
[align=left]构造函数初始化列表:省略初始化列表而在构造函数体内进行初始化是可以的。[/align]
[align=left]构造函数分两个阶段执行:(1)初始化阶段 (2)普通的计算阶段。计算阶段由构造函数函数体重的[/align]
[align=left]所有语句完成。[/align]
[align=left]
[/align]
[align=left]有些成员必须在构造函数初始化列表中进行初始化,对于这样的成员,在构造函数体中对他们进行赋值将不起作用,没有默认构造函数的类类型成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数的初始化列表中进行初始化。[/align]
[align=left]
[/align]
[align=left]2.成员初始化的次序:按照成员声明一致的次序编写构造函数初始化列表是个好主意,此外,尽可能避免使用成员初始化其他成员。[/align]
[align=left]
[/align]
[align=left]类类型的数据成员的初始化式:[/align]
[align=left]初始化类类型的成员时,要指定实参并传递给成员函数的一个构造函数,可以使用该类型的任意构造函数。[/align]
[align=left]默认构造函数:只要定义一个对象时没有提供初始化式,就是用默认的构造函数。[/align]
[align=left]
[/align]
[align=left]只有当一个类没有定义构造函数时,编译器才会自动生成一个默认的构造函数。[/align]
[align=left]
[/align]
[align=left]如果类包含内置或复合类型的成员,则类不该依赖于合成的默认构造函数,应该定义自己的构造函数来初始化这些成员。[/align]
[align=left]
[/align]
[align=left]抑制由构造函数定义的隐式转换:用explicit关键字[/align]
[align=left]
[/align]
[align=left]显示初始化类成员有三个重大缺点:[/align]
[align=left]1.要求类的全体数据成员都是public[/align]
[align=left]2.将初始化的任务放在程序员身上,容易漏忘。[/align]
[align=left]3.如果增加或删除一个成员,必须找到所有的初始化并正确更新。[/align]
[align=left]
[/align]
[align=left]12.5友元:允许一个类将其非公有成员的访问权授予指定函数或类。以friend开始。[/align]
[align=left]友元声明将已命名的类或非成员函数引入到外围作用域中,此外,友元函数可以在类的内部定义,该函数的作用域扩展到包围该类定义的作用域。[/align]
[align=left]
[/align]
[align=left]12.6 static类成员。[/align]
[align=left]static成员函数没有this指针,它可以直接访问所属类的static成员。但不能直接访问非static成员。[/align]
[align=left]因为static成员不是任何对象的组成成分,所以static成员函数不能被声明为const。毕竟,将成员函数声明为const就是承诺不会修改该函数所属的对象。最后,static陈元函数也不能声明为虚函数。[/align]
[align=left]
[/align]
[align=left]static成员必须在类外部定义,不像普通数据成员,static成员不是通过类的构造函数进行初始化的,而是在定义是应该初始化。[/align]
[align=left]
[/align]
[align=left]小结:类是C++中最基本的特征,允许定义新的类型以适应应用程序的需要,同时使程序更短更易于修改。[/align]
[align=left]数据抽象是指定义数据和函数成员的能力,而疯转是指从常规访问中保护类成员的能力,他们都是类的基本,成员函数定义类的接口,通过将类的实现所用到的数据和函数设置为private来封装类。[/align]
[align=left]类可以定义构造函数,他们是特殊的成员函数,控制如何初始化类的对象,可以重载构造函数,每个构造函数应初始化每个数据成员,初始化列表应包含的是名-值对,其中的名是一个成员,而值则是该成员的初始值。[/align]
[align=left]类可以将对其非public成员的访问权授予其他类或函数,并通过将其他的类或函数设为友元来授予其访问权。[/align]
[align=left]类也可以定义mutable或static成员。mutable成员永远都不能为const,它的值可以再const成员函数中修改,static成员可以是函数或数据,独立于类类型的对象而存在。[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
1.避免类内部出现无意的,可能破坏对象状态的用户级错误。
2.随时间的推移,可以根据需求改变或缺陷报告来完善类实现。无需改变用户及代码。
从const成员函数返回*this
不能从const成员函数返回指向类对象的普通引用。const成员函数只能返回*this作为一个const引用。
12.3类作用域
在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符 .或->来访问。操作符左边分别是一个类对象或一个类对象的指针。
必须在类中先定义类型名字,才能将它们用作数据成员的类型,或者成员函数的返回类型或形参类型。
12.4构造函数
class Sales_item { public: Sales_item() const;//error 错误的 };
[align=left]构造函数初始化列表:省略初始化列表而在构造函数体内进行初始化是可以的。[/align]
[align=left]构造函数分两个阶段执行:(1)初始化阶段 (2)普通的计算阶段。计算阶段由构造函数函数体重的[/align]
[align=left]所有语句完成。[/align]
[align=left]
[/align]
[align=left]有些成员必须在构造函数初始化列表中进行初始化,对于这样的成员,在构造函数体中对他们进行赋值将不起作用,没有默认构造函数的类类型成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数的初始化列表中进行初始化。[/align]
[align=left]
[/align]
[align=left]2.成员初始化的次序:按照成员声明一致的次序编写构造函数初始化列表是个好主意,此外,尽可能避免使用成员初始化其他成员。[/align]
[align=left]
[/align]
[align=left]类类型的数据成员的初始化式:[/align]
[align=left]初始化类类型的成员时,要指定实参并传递给成员函数的一个构造函数,可以使用该类型的任意构造函数。[/align]
[align=left]默认构造函数:只要定义一个对象时没有提供初始化式,就是用默认的构造函数。[/align]
[align=left]
[/align]
[align=left]只有当一个类没有定义构造函数时,编译器才会自动生成一个默认的构造函数。[/align]
[align=left]
[/align]
[align=left]如果类包含内置或复合类型的成员,则类不该依赖于合成的默认构造函数,应该定义自己的构造函数来初始化这些成员。[/align]
[align=left]
[/align]
[align=left]抑制由构造函数定义的隐式转换:用explicit关键字[/align]
[align=left]
[/align]
[align=left]显示初始化类成员有三个重大缺点:[/align]
[align=left]1.要求类的全体数据成员都是public[/align]
[align=left]2.将初始化的任务放在程序员身上,容易漏忘。[/align]
[align=left]3.如果增加或删除一个成员,必须找到所有的初始化并正确更新。[/align]
[align=left]
[/align]
[align=left]12.5友元:允许一个类将其非公有成员的访问权授予指定函数或类。以friend开始。[/align]
[align=left]友元声明将已命名的类或非成员函数引入到外围作用域中,此外,友元函数可以在类的内部定义,该函数的作用域扩展到包围该类定义的作用域。[/align]
[align=left]
[/align]
[align=left]12.6 static类成员。[/align]
[align=left]static成员函数没有this指针,它可以直接访问所属类的static成员。但不能直接访问非static成员。[/align]
[align=left]因为static成员不是任何对象的组成成分,所以static成员函数不能被声明为const。毕竟,将成员函数声明为const就是承诺不会修改该函数所属的对象。最后,static陈元函数也不能声明为虚函数。[/align]
[align=left]
[/align]
[align=left]static成员必须在类外部定义,不像普通数据成员,static成员不是通过类的构造函数进行初始化的,而是在定义是应该初始化。[/align]
[align=left]
[/align]
[align=left]小结:类是C++中最基本的特征,允许定义新的类型以适应应用程序的需要,同时使程序更短更易于修改。[/align]
[align=left]数据抽象是指定义数据和函数成员的能力,而疯转是指从常规访问中保护类成员的能力,他们都是类的基本,成员函数定义类的接口,通过将类的实现所用到的数据和函数设置为private来封装类。[/align]
[align=left]类可以定义构造函数,他们是特殊的成员函数,控制如何初始化类的对象,可以重载构造函数,每个构造函数应初始化每个数据成员,初始化列表应包含的是名-值对,其中的名是一个成员,而值则是该成员的初始值。[/align]
[align=left]类可以将对其非public成员的访问权授予其他类或函数,并通过将其他的类或函数设为友元来授予其访问权。[/align]
[align=left]类也可以定义mutable或static成员。mutable成员永远都不能为const,它的值可以再const成员函数中修改,static成员可以是函数或数据,独立于类类型的对象而存在。[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
相关文章推荐
- 地球坐标,火星坐标,百度坐标转换C++
- c++实现md5加密
- C++资源汇总
- C++ string类:find()和find_first_of()
- 现代C++
- c语言中一些整型常量的范围
- struct的用法--------C语言结构体(struct)常见使用方法(转载)
- hdu2157 How many ways?
- C++类静态变量的一种使用特例
- 单链表(C语言实现)
- TextView上显示C++代码
- 顺序表的静态存储(C语言实现)
- 简单贪吃蛇游戏的C++实现
- [C语言][LeetCode][203]Remove Linked List Elements
- 全面介绍Windows内存管理机制及C++内存分配实例
- C++ 学习笔记十四 - C++ char命令传送中文练习
- C++ —— RAII编程思想
- C++ —— RAII编程思想
- [LeetCode]27. Remove Element
- 初识C++之虚函数