网站建设主要问题及建议,潮州专业网站建设报价,怎么把wordpress字去掉,网站开发工程师介绍前言 本篇仅整理一些比较偏的多态的问答题 文章目录前言一. 内联与虚函数二. 静态函数与虚函数三. 构造函数与虚函数四. 虚函数与普通函数结束语一. 内联与虚函数 内联函数可以是虚函数吗#xff1f; 首先我们看一下语法有没有问题 我们看到#xff0c;程序成功运行了#…前言 本篇仅整理一些比较偏的多态的问答题 文章目录前言一. 内联与虚函数二. 静态函数与虚函数三. 构造函数与虚函数四. 虚函数与普通函数结束语一. 内联与虚函数 内联函数可以是虚函数吗 首先我们看一下语法有没有问题 我们看到程序成功运行了语法也没有报错。好像没问题 但是内联函数时不能成为虚函数的 首先内联关键字inline是对编译器的一种建议具体该函数能否成为内联函数还要看编译器。 而一个函数成为内联函数那他就会像宏一样直接在调用的地方展开所以不需要函数地址。 而虚函数是需要函数有地址的因为需要将指向该函数的函数指针放到虚表里。 所以内联函数和虚函数是相矛盾的二者不可兼得 这里之所以没有崩溃是编译器认为该函数时虚函数了就不会让他成为内联函数 PS内联函数不可以是虚函数但是inline修饰的函数可以是虚函数。这里要注意以下问法
二. 静态函数与虚函数 静态成员函数可以是虚函数吗 答案是不可以 首先以使用的角度静态成员变量或者静态成员函数并不是单独属于某个对象和实现多态的目的没有关系多态就是要让不同对象有不同的结果。其次静态成员函数没有this指针使用类型::成员函数的调用方式无法访问虚函数表所以静态成员函数无法放到虚表里 三. 构造函数与虚函数 构造函数可以是虚函数吗 答案是不可以 因为虚函数的地址是要进虚表的虚表是在编译时形成的没问题但是虚表指针是在初始化列表形成的。 如果将构造函数设置成虚函数那调用构造函数要虚表指针但是虚表指针要在构造函数的初始化列表生成就找不到虚表。成了一个死循环。 扩展拷贝构造也不可以设置成虚函数原理和构造函数一样。
但是赋值重载可以设置成虚函数语法并没有报错 但是不建议因为子类的赋值重载本身就需要调用父类的赋值重载父类部分交给父类子类部分交给子类那你重写了赋值重载那不就找不到父类的赋值重载了吗。
四. 虚函数与普通函数 虚函数和普通函数的效率谁更高 答案是不一定 虚函数其实并不是一定去虚表里找函数地址。 除内联函数每个函数都有都有函数地址而一个类有虚函数则会有虚表会有指向虚函数的函数指针存储在虚表中。 而如果是普通对象调用虚函数其实是直接调用函数地址并不会进入虚表 而当是指针或引用时才会进入虚表找函数地址
结束语
本篇文章是对多态的一些比较偏的知识的笔记掌握要求不深感谢您的阅读
如果觉得本篇文章对你有所帮助的话不妨点个赞支持一下博主拜托啦这对我真的很重要。