1.c++类 --用户定义的类型(user-defined type, UDT)
2.信息隐藏(information hiding)
3.除了静态数据成员外, 数据成员不能在类中被显示地初始化
4.一个成员函数只能重载自己类的其他成员函数
5.数据隐藏的优点:
如果数据的访问属性是私有的, 则一般除了类的共有接口, 不能直接访问私有成员
如果数据的访问属性是共有的, 则任何地方都可以直接访问这个数据成员
但是, 如果类的实现变动了, 即那个成员改变了, 那么, 如果这个成员是私有的, 但共有接口没改变, 则不需要修改使用这个类的代码
如果这个成员是共有的, 那么, 直接访问这个成员的任何代码都需要做相应的改变了
--所以, 数据封装性自有它的优点
6.访问限定符(access specifier) public, private, protected
7.在某些情况下, 允许某个函数而不是整个程序可以访问类的私有成员, 这样做会比较方便, 友元(friend)机制允许一个类授权其他的函数访问他的非公有
成员
8.友元声明以关键字friend开头, 只能出现在类的声明中
9.因为只有当一个类的类体已经完整时, 它才被视为已经被定义, 所以一个类不能有自身类型的数据成员, 但可以用指向自身类型的指针或引用作为数据成
员
10.类的定义不会引起存储区分配, 只有当定义一个类的对象时, 系统才会分配存储区
11.每个类成员函数的拷贝只有一份
12.把一个成员函数声明为const可以保证这个成员函数不修改类的数据成员, 但是, 如果该类含有指针, 那么在const成员函数中就能修改指针所指的对象,
编译器不会检测为错误, 这常常令c++初学者吃惊
13.为了允许修改一个类的数据成员, 即使它是一个const对象的数据成员, 我们也可以把改数据成员声明为mutable(易变的). mutable数据成员永远不会是
const成员, mutable成员中可以被更新
14.每个类成员函数都含有一个指向被调用对象的指针, 这个指针被称为this:
在非const成员函数中, 它的类型是指向该类类型的指针
在const成员函数中, 是指向const类类型的指针
在volatile成员函数中, 是指向volatile类类型的指针
15.类的静态成员被当做该类类型的全局对象, 对于非静态成员, 每个类对象都有自己的拷贝, 而静态数据成员对每个类类型只有一个拷贝, 静态数据成员只
有一份, 该类类型对所有对象共享访问
16.同全局对象相比, 使用静态数据成员有两个优势:
静态数据成员没有进入程序的全局名字空间
可以实现信息隐藏, 静态成员可以是private成员, 而全局对象不能
17.静态数据成员的类型可以是其他所属类, 而非static数据成员只能被声明为该类的对象的指针或引用
18.静态数据成员可以被作为类成员函数的缺省实参, 而非static成员不能
19.静态成员函数的声明除了在类体中的函数声明加上关键字static, 以及不能声明为const或volatile之外, 与非静态成员函数相同, 出现在类体外的函数
定义不能指定关键字static
20.静态成员没有this指针
21.类成员的指针必须总是通过特定的对象或指向该类类型的对象的指针来访问
针对类对象和引用的.*
针对指向类对象的指针的->*
22.定义一个成员函数指针需要制定函数返回类型, 参数表和类:
int (CTest::*)();
int (CTest::*pmf)() = &CTest::test;
pmf = &CTest::test2;
23.静态类成员属于该类的全局对象和函数
24.联合:一种节省空间的类
使用union是危险的, 通过一个不适当的数据成员以为的获取到当前存储在union中的值]
25.c++标准库提供了一个bitset类模板, 它可以辅助操作位的集合, 在可能的情况下, 应尽可能使用它来取代位域
26.一个类可以在另一个类中定义, 这样的类被称为嵌套类(nested class)
嵌套类是其外围类的一个成员
27.类也可以定义在函数体内, 这样的类被称为局部类(local class)
局部类的成员函数必须被定义在类定义中, 这就把局部类的成员函数的复杂性限制在几行代码中