C++ 虚函数可以有默认参数吗?

c++server side programmingprogramming

是的,C++ 虚函数可以有默认参数。

示例代码

#include<iostream>
using namespace std;
class B {
   public:
      virtual void s(int a = 0) {
         cout<<" In Base \n";
      }
};

class D: public B {
   public:
      virtual void s(int a) {
          cout<<"在 Derived 中,a="<<a;
      }
};

int main(void) {
   D d; // 类 D 的对象
   B *b = &d;// 指向 d 的 B* 类型的指针
   b->s();// 打印"D::s() called"
   return 0;
}

输出

在 Derived 中,a=0

在此输出中,我们观察到,调用派生类的 s() 并使用基类 s() 的默认值。

默认参数不参与函数签名。因此,基类和派生类中 s() 的签名被视为相同,因此基类的 s() 被覆盖。编译时使用默认值。当编译器检查到函数调用中缺少参数时,它会替换给定的默认值。因此,在上面的程序中,x 的值在编译时被替换,并且在运行时调用派生类的 s()。a 的值在编译时被替换,并且在运行时调用派生类的 s()。


相关文章