C++ 内联函数与虚拟函数的异同

内联函数将函数体嵌入调用点,提升性能和代码体积,但可读性较低;虚拟函数通过多态性调用子类覆写的函数,提高灵活性,但运行时开销较高。C++ 内联函数与虚拟函数的异同
内联函数
内联函数是编译器在调用时将函数体嵌入到调用点,而不是执行函数调用过

内联函数将函数体嵌入调用点,提升性能和代码体积,但可读性较低;虚拟函数通过多态性调用子类覆写的函数,提高灵活性,但运行时开销较高。

C++ 内联函数与虚拟函数的异同

C++ 内联函数与虚拟函数的异同

内联函数

内联函数是编译器在调用时将函数体嵌入到调用点,而不是执行函数调用过程的函数。

优点:

  • 提升性能:避免调用开销。
  • 减小代码体积:函数体不会重复出现在多个调用点。

缺点:

  • 编译时间增加:需要为每个调用点编译函数体。
  • 代码可读性下降:函数体分散在整个代码库中。

语法:

inline int sum(int a, int b) {
  return a + b;
}

登录后复制

虚拟函数

虚拟函数是通过继承机制实现多态性的函数。当调用父类对象上的虚拟函数时,实际调用的函数由对象的动态类型决定。

优点:

  • 实现多态性:子类可以重写父类的虚拟函数。
  • 提高代码的可扩展性和灵活性。

缺点:

  • 运行时开销:需要维护虚函数表和间接调用。
  • 代码复杂度增加:需要使用 virtualoverride 关键字。

语法:

class Base {
 public:
  virtual void print() {
    std::cout << "Base" << std::endl;
  }
};

class Derived : public Base {
 public:
  virtual void print() override {
    std::cout << "Derived" << std::endl;
  }
};

登录后复制

异同比较:

特征 内联函数 虚拟函数
调用机制 函数体嵌入 间接调用
性能 更高 较低
代码体积 更小 更大
可读性 较低 较高
多态性 不支持 支持

实战案例:

可以用内联函数实现简单的数学运算,例如求和:

inline int sum(int a, int b) {
  return a + b;
}

int main() {
  std::cout << sum(1, 2) << std::endl;  // 输出:3
}

登录后复制

可以用虚拟函数实现图形绘制接口:

class Shape {
 public:
  virtual void draw() = 0;
};

class Circle : public Shape {
 public:
  virtual void draw() override {
    std::cout << "Drawing a circle" << std::endl;
  }
};

int main() {
  Shape* shape = new Circle();
  shape->draw(); // 输出:Drawing a circle
}

登录后复制

以上就是C++ 内联函数与虚拟函数的异同的详细内容,更多请关注叮当号网其它相关文章!

文章来自互联网,只做分享使用。发布者:老板不要肥肉,转转请注明出处:https://www.dingdanghao.com/article/361788.html

(0)
上一篇 2024-04-17 10:00
下一篇 2024-04-17 10:00

相关推荐

联系我们

在线咨询: QQ交谈

邮件:442814395@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信公众号