栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】虚函数可以是内联函数嘛

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】虚函数可以是内联函数嘛

内联函数

内联函数由关键词inline修饰,在函数声明和定义时都需要加上关键词inline。
内联函数直接将代码复制到调用位置,与一般函数不同由调用堆栈执行函数代码。
好处:避免了调用堆栈切换指令的开销,加快程序执行的速度
坏处:过长的代码被直接复制,增加了代码区的内存占用
所以一般在函数本身代码较短,功能简单的情况下使用内联函数
与宏定义相比:

#include 
using namespace std;
#define SUM(x) x*x
inline int fun(int x)
{
	return x * x;
}
int main()
{
	int a = SUM(2 + 3); //a直接由宏定义展开得到2+3*2+3=11
	int b = fun(2 + 3); //b由内联函数传参计算得到(2+3)*(2+3)=25
	return 0;
}
虚函数

在函数前加上vitual关键字,可以在子类中重写虚函数,也可以通过子类对象的引用或指针赋值父类对象表现多态。

虚函数可以是内联函数嘛

可以,但是表现运行多态时不可以
内联函数在编译时复制到调用位置,运行多态在运行期间确定调用的是父类函数还是子类函数,无法直接通过内联确定复制的目标函数。

#include 
using namespace std;
class Base{
public:
    inline virtual void func(){
        cout << "I am Basen";
    }
    virtual ~Base(){}
};
class Derived:public Base{
public:
    inline void func(){   // 不写inline时隐式内联
        cout << "I am Derivedn";
    }
};
int  main(){
    Base b;
    b.func(); //没有使用动态多态,在编译期能确定函数
    Base *bptr = new Derived(); //运行期多态
    bptr->func(); //在运行期才能确定调用的是子类的fun函数
    delete bptr;
    bptr = nullptr;
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号