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