cpp软件架构狮 2018-07-21 19:43:59
"运算符重载"
1.前置++;前置--;
2.后置++;后置--;
要创建一个临时变量接收计算时的那个变量,记住要把临时变量返回去。
3.== 和 != 号的重载。
4.继承:
1)C++中的继承方式(public, private, protected)会影响子类的对外访问属性。判断某一句话,能否被访问
(三看原则 )
1)看调用语句,这句话写在子类的内部、还是外部
2)看子类如何从父类继承(public, private, protected)
3)看父类中的访问级别(public, private, protected);
2)继承的使用情况:
1) protected 继承,只能在家族内部使用,不能在类的外部使用
2)项目开发中,通常都是 public 继承。
5.继承的类型兼容原则:
1)子类对象可以当作父类对象使用
2)子类对象可以直接赋值给父类对象
3)子类对象可以直接初始化父类对象
4)父类指针可以直接指向子类对象
5)父类引用可以直接引用子类对象。
6.继承与组合混搭情况下,构造和析构函数调用原则
1) 先调用父类构造函数,再调用组合类构造函数,最后调用自己的构造函数
2)先调用自己的析构函数,再调用组合类析构函数,最后调用父类析构函数,
3)先构造的对象后释放
7.不可以被继承的函数
1)基类中的构造函数和析构函数
2)基类中重载的运算符 = 号函数
8.继承中同名成员函数和变量的问题:
1)如果子类和父类中有相同的函数和变量名;子类调用时默认调用自身的函数和变量。
2)如果想调用父类的函数和变量,需要加上 "类名和域作用域符",显式调用。
9.继承中的静态成员特性:
1)基类中定义的静态成员,可被所有派生类共享
2)"静态成员的访问权限和普通成员一样";遵守派生类的访问控制
3)与函数重载一样,如果子类中重新定义了同名的静态函数,基类的函数将被隐藏
4)静态成员函数不能是虚函数。
9.继承中的函数重载现象;
1)"如果重新定义了基类中的重载函数,"只要函数名相同,继承的基类中的重载函数将被隐藏。
想要调用必须使用域作用符显式调用。
9.多继承的概念:
1)多继承可能会出现二义性; 解决办法:显示的调用不同类中的同名属性或方法
2)多继承的相同数据重复继承。解决办法:虚继承:virtual 既保持一份数据,也不会产生二义性。
663 10.菱形继承解决办法:
加上 virtual ,用虚继承。
11.多态 :分为:静态多态(编译时多态)和动态多态(运行时多态)。
面向对象编程的设计思路:"开闭原则(对修改关闭,对扩展开放。)"
C++的多态性是通过虚函数来实现的。(虚函数允许子类重新定义父类成员,这种做法叫做重写或覆盖)。
12.向上类型转换
13.虚函数:函数前加 virtual 修饰
1)virtual 关键字只能修饰成员函数
2)构造函数不能为虚函数
3)创建一个虚成员函数,只需在函数声明前加上 virtual 关键字。
4)如果一个函数在基类中被声明为 virtual ,那么它在所有派生类中都是 virtual ;它派生类的函数前可以加也可以不加 virtual
关键字;推荐加。
纯虚函数:virtual int func() = 0;
1)当一个类中有纯虚函数时,这个类为抽象类;"同时注意:不能实例化一个抽象类,编译时会报错"。
2)当继承一个抽象类时,必须实现所有的纯虚函数,否则抽象类派生的类也是一个抽象类。
14.建立公共接口的目的:
1)将子类中公共的操作抽象出来。可以通过一个公共接口操作呢一组类。这个公共接口不需要事先实现,即创建一个公共类。
15.模板方法:就是通过创建一个公共借口来实现的。
一.多态的思想:
1.封装:突破C函数的概念,。。。用类做函数参数的时候,可以调用对象的属性和对象的方法
2.继承:A B代码可以复用,可以使用前人的代码
3.多态。可以使用未来的代码,架构不用改变
二. 多态成立的条件:
1.要有继承
2.要有虚函数重写
3.用父类指针或父类引用指向子类对象
C++基础知识点第七天
1.虚析构函数的特点和目的:
1)通过父类指针,把所有子类对象的析构函数都执行一边。
2)通过父类指针,释放所有的子类资源
2.函数的重写、重载、重定义
1)重载:
必须在同一个类中
重载是在编译期间根据参数类型和个数决定函数调用的
子类无法重载父类的函数,父类同名函数将被覆盖
2)重写:
必须发生在父类与子类之间。(同时分为两类)
并且父类与子类的函数有完全相同的原型。
1)virtual 具有这个关键字的,发生重写时会产生多态。
2)无这个关键字的,叫重定义。
3)重定义:(非虚函数重写叫重定义)
父类与子类的有完全相同的函数原型,而且无 virtual 关键字修饰,此时叫做函数重定义。
3.子类中的 vptr 指针的分步初始化
1)当创建子类对象时,如果它具有 vptr 指针,那么此时是分步初始化的。
2)当执行父类的构造函数时,子类的 vptr 指针会指向父类的虚函数表
当父类的构造函数执行完毕后,会把子类的 vptr 指针指向子类的虚函数表
3)结论:子类的vptr指针是分步初始化的。它在程序运行时会进行寻址操作,效率会降低。不建议将每个成员函数都声明为虚函数。
4.纯虚析构函数:
5.多态的案例:
1)思路:
1.定义一套自己的数据接口,打包放在结构体中,数据接口使用函数指针。
2.初始化模块接口。(将自己定义的接口与生产商实现的函数联系在一起。)
6.函数指针
本页共97段,2345个字符,6072 Byte(字节)