1.成员函数的特性:
一般成员函数可以重载,构造函数也可以重载,但是析构函数不可以重载。
成员函数如果定义在类体类,则自动成为内联函数;如果定义在类体外,也想定义成内联函数,则需要加 inline.
类的数据成员可以是任意类型的数据,也可以是对象,但是只允许是其他类的对象,而不允许是自有函数原型语句。
在类体内对数据成员定义时,不允许初始化。
当在类体外定义成员函数时,必须在类体内有函数原型语句。
2.对象的定义和使用
类是一种类型,不占用内存空间,定义对象时,会分配相应的存储空间。
对象中只存放数据成员,成员函数不存放在对象中,而是存放在一个可悲对象访问的公共区域中。
3.构造函数和析构函数
程序中一般不直接调用构造函数,而是由系统在创建对象时自动调节执行。
拷贝构造函数具有一般构造函数的功能,其作用是使用已知对象给所创建的对象进行初始化。拷贝构造函数只有一个参数,并且是对某一个对象的引用,如果一个类中没有定义拷贝构造函数,则系统自动提供一个默认的拷贝构造函数。
对象作为函数实参传递给函数形参,调用拷贝构造函数初始化形参对象P,当函数调用结束时,释放形参对象P。
函数返回值为对象,执行return P时,系统调用拷贝构造函数利用对象P创建并初始化一个无名对象,函数返回时将无名对象的值赋给对象P1,让后释放无名对象。
4.静态成员
不论有多少个属于类的对象,其静态成员在内存中只有一个备份,为类中所有对象共享。
对静态数据成员的初始化必须在类外进行。静态数据成员不属于某个对象,在给对象分配存储空间时,不包括静态数据成员所占的空间。自要定义了静态数据成员,即使没有定义对象,静态数据成员的空间也被分配。可以通过对象引用,也可以通过类引用。
常对象中的成员,并不是自动转化成常成员函数或者常数据成员。
const 是函数类型的一部分,在函数声明和函数定义部分都要有此关键字。const 是用于判断函数重载的条件。
常数据成员通过构造函数的初始化列表进行初始化,而静态常数据成员的初始化在类体外完成。
5.指向类的数据成员的指针和指向类成员函数的指针。
利用赋值语句对对象进行赋值时,系统先调用构造函数创建无名对象,再将其值赋给被赋值对象,然后调用析构函数,将无名对象释放。
当在一个类中出现了子对象时,该类 的构造函数就要负责子对象的初始化,子对象的初始化应该通过构造函数的初始化列表来完成。
6.友元函数可以访问类中的私有成员,但是不尅直接引用数据成员,而必须通过对象来引用。通常友元函数的参数是对象的引用。
当一个类是另一个类的友元类时,该类中的所有的成员函数都是这个类的友元函数。
7.类的作用域和对象的生存期
全局对象定义在某个文件中,生存期最长,作用域最大。
全局对象的定义在函数体外,定义时不加修饰符。在某个文件中定义的全局对象,而在其他文件中使用时应该用extern来声明。