- 空指针调用结构体中的成员函数
- const 修饰成员函数,不能更改函数成员的值
- 友元, 让朋友可以访问本类的私有变量, * 全局函数做友元 * 类做友元 * 成员函数做友元
- 运算符重载:注意格式就ok
- 还有<< 这个输出时候的重载, 各种个样的函数重载,主要是为了方便,在主函数里面的实现
- 继承: 相当一个树的结构 class A : public B;
- 3中继承方式, 就是把 public private protected 再次加以限制而已
- 继承同名成员处理方式, (静态和非静态同样)
- //当子类与父类拥有同名的成员函数,子类会隐藏父类中所有版本的同名成员函数 //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
- C++允许**一个类继承多个类** **C++实际开发中不建议用多继承**
- class Son : public Base2, public Base1
-
* 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义 * 利用虚继承可以解决菱形继承问 多态:
* 静态多态的函数地址早绑定 - 编译阶段确定函数地址 * 动态多态的函数地址晚绑定 - 运行阶段确定函数地址 //我们希望传入什么对象,那么就调用什么对象的函数 //如果函数地址在编译阶段就能确定,那么静态联编 //如果函数地址在运行阶段才能确定,就是动态联编 //函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。 //多态满足条件: //1、有继承关系 //2、子类重写父类中的虚函数 当类中有了纯虚函数,这个类也称为==抽象类==
**抽象类特点**:
* 无法实例化对象 * 子类必须重写抽象类中的纯虚函数,否则也属于抽象类
1. 虚析构或纯虚析构就是用来解决通过父类指针释放子类对象
2. 如果子类中没有堆区数据,可以不写为虚析构或纯虚析构
3. 拥有纯虚析构函数的类也属于抽象类