一、类
1、this指针
类的多个成员共用一份成员函数,通过this指针区别不同对象,this是用于标识一个对象自引用的隐式指针。注意:静态成员函数中没有this指针所以静态成员不能访问对象的非静态数据成员。
2、类对象成员
类中也可以用其它类的对象作为成员,对象成员必须采用初始化列表方式进行初始化。
3、向函数传递对象
可分为:值传递,传引用,传指针
值传递以按域复制的方式,将实参的每个数据成员的值按位拷贝到形参的各数据成员中。参数传递完成后,形参与实参无关。
引用和指针方式传递对象给函数的方式都是将实参对象的地址传递给函数,能够在函数中修改实参对象的值。
4、友元
友元机制允许一个类授权其他函数直接访问类的private和protected成员。也就是说定义友元的类中,友元函数可以在类外直接访问类中的所有成员。
友元使编程更简洁,程序运行效率也更高,但它可以直接访问类的私有成员,破坏了类的封装性和信息隐藏。注意:
(1)关键字friend用于声明友元,它只能出现在类的声明中。(2)友元函数并非类的成员函数,不受权限词限定,public、private、protected。
二、继承
继承是代码重用的基本工具,是类的一个重要特征。继承克服了面向过程程序设计语言没有软件复用语言机制的缺点。已有类为基类,新类称为派生类。派生类不仅能够继承类的功能,还能够对基类的功能进行扩充、修改或重定义。C++既支持单继承,又支持多继承。
1、继承方式
分为公有继承、保护继承和私有继承,语法:( class 派生类名:[继承方式] 基类名{ }; )C++默认为private继承。
2、构造函数调用时间和次序
基类构造函数——》对象成员构造函数——》派生类构造函数
3、虚拟继承
对于多继承的方式,一个派生类对应多个基类。会出现这样的情况:对于派生类的一个对象中存在同一个基类的两份不同的数据成员,容易产生数据的不一致性。
解决方法:利用关键字virtual限定继承方式,将公共基类指定为虚基类,使该基类的成员在派生类中只有一份拷贝。
4、虚拟继承的构造方式
(1)先调用虚基类构造函数,再调用非虚基类的构造函数 (2)若同一继承包含了多个虚基类,就按照被继承的先后次序调用。(3)若某虚基类在前面已被调用,就不再调用。
5、虚基类由最终派生类初始化
如果一个类为虚基类,且没有缺省或无参构造函数,最终派生类需要通过初始化列表对其进行初始化。
6、继承与组合
继承:“Is a” 组合:“Has a”