AI的回答,我感觉比较简洁清晰所以就记录下来,方便以后复习。
一、虚函数
1.纯虚函数与非纯虚函数
1.1 虚拟类中的虚函数可以是纯虚函数(没有默认实现),必须在派生类中实现才能实例化。
1.2 虚拟类中的虚函数可以有默认实现,派生类可以选择性地重写这些函数。
2.用途
虚函数的指针可以指向继承它的具体类的对象中的函数,实现多态性的效果。
3.用法
3.1 继承虚拟类的具体类的对象可以使用虚拟类的指针来指向。这种情况下,虚拟类的指针中存放的是具体类的对象的地址。
3.2 定义一个通用的接口,让具体的子类来实现这个接口的具体功能。这种做法有以下几个优点:
3.2.1. 约束和规范:虚拟类定义了一组必须实现的接口或方法,强制子类提供这些方法的具体实现。这样可以确保子类都具有相同的行为,提高了代码的一致性和可维护性。
3.2.2. 解耦:通过定义虚拟类,可以将接口和实现分离,使得代码模块之间的耦合度降低。调用方只需要知道虚拟类的接口,而不需要关心具体的实现细节。
3.2.3. 多态性:使用虚拟类可以实现多态性,即通过基类指针或引用调用子类对象的方法,实现了运行时多态性,提高了代码的灵活性和扩展性。
3.2.4. 可替换性:通过虚拟类,可以轻松地替换具体的实现类,而不需要修改调用方的代码。这种可替换性使得系统更容易进行扩展和维护。
4.存在意义(部分)
为什么不直接定义具体类而要通过继承虚拟类的方式实现呢?
4.1 灵活性:通过定义虚拟类,可以让不同的具体子类实现同一个接口,从而提高了代码的灵活性和可扩展性。
4.2 可替换性:基于虚拟类的设计可以实现依赖倒置原则,使得模块之间的依赖关系更松散,可以轻松替换具体的实现类。
总的来说,通过虚拟类的方式定义接口可以提高代码的可维护性、可扩展性和灵活性,同时遵循了面向对象设计的一些重要原则,如依赖倒置原则和开闭原则。
二、静态函数
1.概念:静态函数(或称为静态方法)是属于类而不是类的实例的函数。在C++中,静态函数可以通过类名直接调用,而不需要创建类的实例。静态函数通常用于执行与类相关的操作,而不需要访问特定对象的状态。
2.声明与定义:在C++中,对于静态成员函数的定义,如果只是在类的声明中声明了静态成员函数而没有提供函数体,而且在程序中没有用到这个函数,那么在类外部定义这个静态成员函数是不是必须的,存在一些情况下可以不定义的:
2.1未被使用的静态成员函数:如果一个静态成员函数在类中声明了但在整个程序中没有被使用到,那么可以不对其进行定义。
2.2链接器优化:一些链接器可能会进行优化,如果一个静态成员函数没有被使用到,链接器可能会在链接阶段忽略这个函数的定义。
3.常见用途和作用:
3.1 访问类的静态成员变量:静态函数可以直接访问类的静态成员变量,这些变量在类的所有实例之间是共享的。
3.2 工具函数:静态函数可以作为工具函数,用于执行一些与类相关的操作,而不需要操作特定对象的状态。
3.3 工厂方法:静态函数可以用作工厂方法,用于创建类的实例或对象。
3.4 单例模式:静态函数可以用于实现单例模式,确保类只有一个实例。
3.5 命名空间:在C++中,静态函数可以用于模拟命名空间,将相关函数组织在一起。
3.6 访问控制:静态函数可以用于实现一些类的私有方法,只有类的成员函数可以访问它们。
----------------------------------------------------------总结-----------------------------------------------------------------------
静态函数:
1.工具函数:使用频率较高&&函数功能固定&&函数的执行不依赖对象属性
2.工厂方法:该方法不止依赖静态函数或者抽象类实现,它是依据特定输入创键类的不同对象的方法
3.单例模式:①将构造函数私有化;②创建一个提供构造方法的静态函数。以此实现类的单例模式
4.命名空间:避免命名冲突的编程方法,其内部函数是否静态不影响命名空间外部(不从内存角度考虑的话)