所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤: 图:编译过程 静态库 之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。 试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必...
函数重载 class A { public: void do(int a); void do(int a, int b); }; 动态多态(晚绑定) 虚函数:用 virtual 修饰成员函数,使其成为虚函数 注意: 普通函数(非类成员函数)不能是虚函数 静态函数(static)不能是虚函数 构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中...
1、对象里有指针,指向虚函数表 2、通过指针,找到虚函数表,进而调用虚函数 静态联编和动态联编也存在着区别,静态联编效率高,动态联编支持多态。 简而言之,也就是说一个类里有虚函数,那么这个类的实例化对象中必然存在指针,指针指向虚函数表,通过指针指向的虚函数表调用虚函数,下面是这个过程的一个示意图: image-...
(3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。 (4) 静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。 Static成员函数 静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。 静态成...
参数的区别:隐藏函数和被隐藏的函数的参数列表可以相同,也可不同,但是函数名肯定要相同。当参数不相同时,无论基类中的参数是否被 virtual 修饰,基类的函数都是被隐藏,而不是被重写。 说明:虽然重载和覆盖都是实现多态的基础,但是两者实现的技术完全不相同,达到的目的也是完全不同的,覆盖是动态态绑定的多态,...
链接过程主要包括了地址和空间分配、符号决议和重定向。 2、说一下动态链接和静态链接的区别? 静态链接: 把目标程序运行时需要调用的函数代码直接链接到了生成的可执行文件中,程序在运行的时候不需要其他额外的库文件,且就算你去静态库把程序执行需要的库删掉也不会影响程序的运行,因为所需要的所有东西已经被链接到...
接口:OC采用协议(正式和非正式)的形式来定义接口,而C++采用虚函数的形式来定义接口 方法重载:OC不支持方法重载,C++支持方法重载。方法重载就是方法名相同,参数个数相同,但是参数类型不同或者返回值类型不同。 两者的主要差别是因为OC既支持动态类型也支持静态类型。对于id类型的变量,变量只是一个容器,本身是没有类型...
静态多态和动态多态 难度:⭐⭐ 被考到频率:⭐⭐ 多态分为静态多态和动态多态。 静态多态:在编译期间决定程序的执行过程。包括函数重载和泛型编程,泛型编程包括函数模板和类模板。 动态多态:在程序运行时根据被引用对象的实际类型判断调用哪个方法。包括虚函数。
静态多态和动态多态 静态多态是指通过模板技术或者函数重载技术实现的多态,其在编译器确定行为。动态多态是指通过虚函数技术实现在运行期动态绑定的技术。 4 什么是虚函数及其作用? 指向基类的指针在操作它的多态类对象时,可以根据指向的不同类对象调用其相应的函数,这个函数就是虚函数。