您的位置:首页 > 编程语言 > C语言/C++

《C++primer》读书笔记一

2016-04-13 09:47 274 查看
数据抽象和封装的两个优点:
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: