C++ primer学习笔记 第12章

1.通过类 能够将实现和 接口分离,用接口指定类所支持的操作,而实现的细节 只需类的实现者了解或关心。

2.类就是定义了一个新的类型和一个新的作用域。

3.public定义的成员可被使用该类型的所有代码访问,private定义的成员可被其他类成员访问。

4.构造函数初始化列表 由成员名和带括号的初始值组成,跟在构造函数的形参之后,并以冒号开头。

5.const成员不能改变其所操作的对象的数据成员,const必须同时出现在声明和定义中,否则编译出错。

6.如果类是用struct关键字定义的,则第一个访问标号之前的成员是公有的;如果类是用class关键字定义的,则这些成员是私有的。

7.当类发生改变时,使用该类的代码必须重新编译。

8.不在类定义体内定义的inline成员函数,其定义通常放在有类定义的同一头文件中。

9.不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。

10.只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。

11.成员函数具有一个附加的隐含形参,即指向该类对象的一个指针,这个隐含形参命名为this,与调用成员函数的对象绑定在一起。

12.当需要将一个对象作为整体引用而不是引用对象的一个成员时,要显示的引用this。最常见:函数返回对调用该函数的对象的引用。

13.非const成员函数中,this的类型是一个指向类类型的const指针,可以改变this所指向的值,但不能改变this所保存的地址。在const成员函数中,this的类型是一个指向const类类型对象的const指针,既不能改变this所指向的对象,也不能改变this所保存的地址。

14.可变数据成员:mutable

15.若函数在类定义体之外定义,则用于返回类型的名字在类作用域之外;若返回类型使用由类定义的类型,则必须使用完全限定名。

16.类定义先编译成员声明,只有所有成员出现之后,才编译他们的定义本身。

17.全局作用域操作符:       ::     。

18.构造函数的名字与类名相同,并且不能指定返回类型。可以有形参也可以没有。

19.每个类的构造函数数量没有限制,只要每个构造函数的形参表是唯一的。

20.构造函数不能声明为const。

21.构造函数初始化列表以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟着一个放在圆括号中的初始化式。

22.构造函数可以在类的内部或外部,初始化式只在构造函数的定义中而不是声明中指定。

23.没有默认构造函数的类类型成员,以及const或引用类型的成员,都必须在构造函数初始化列表中进行初始化。

24.可以初始化const对象或引用类型的对象,但不能对它们赋值。初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。必须对任何const或引用类型成员以及没有默认构造函数的类类型的任何成员使用初始化式。

25.只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数。

26.如果定义了其他的构造函数,则提供一个默认构造函数几乎总是对的。

27.explicit关键字只能用于类内部的构造函数声明上,来防止在需要隐式转换的上下文中使用构造函数,编译器将不使用它作为转换操作符。

28.单形参构造函数应该为explicit。将构造函数设置为explicit可以避免错误,并且当转换有用时,用户可以显示的构造对象。

29.对于没有定义构造函数并且其全体数据成员均为public的类,可以采用与初始化数组元素相同的方式初始化其成员。

30.友元(friend) 机制允许一个类将对其非公有成员的访问权授予指定的函数或类。它只能出现在类定义的内部。

31.友元声明成组地放在类定义的开始或者结尾。

32.必须先定义包含成员函数的类,才能将成员函数设为友元。

33.static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联。

34.static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。

35.可以通过作用域操作符从类直接调用static成员,或者通过对象、引用或者指向该类类型对象的指针间接调用。类成员函数可以不用作用域操作符来引用类的static成员。

36.static成员函数不能被声明为const,且不能声明为虚函数。

37.static成员在定义时进行初始化。

38.static关键字只能用于类定义体内部的声明中,定义不能标志为static。

39.若初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化。但非const static成员的初始化必须放在类定义体的外部。

40.static数据类型可以是该成员所属的类类型,非static成员被限定声明为其自身类对象的指针或引用。

41.static数据成员可用作默认实参。非static数据成员不能用作默认实参。

42.cin做默认实参:Sale_item(std::istream& s = std::cin);

43.若一个类定义了其他构造函数,则通常也应该提供一个默认构造函数。

44.普通成员总是与对象相关联,是某个对象的组成部分;而static成员与类相关联,由该类的全体对象所共享,不是任意对象的组成部分。

45.static数据成员必须在类定义体外部定义,且只定义一次。一般可将它放在类的实现文件(源文件)中。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值