C++基础知识点第六天

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(字节)