为什么这样工作?

时间:2016-05-30 19:07:15

标签: c++ pointers virtual-functions

我真的不明白为什么会这样。

public function dropSoftDeletes()
{
    $this->dropColumn('deleted_at');
}

当我调用函数pomak()时,它将dx称为10,虽然它调用第二个函数pomak(而不是虚函数)并且我明确指出dx = 2.

2 个答案:

答案 0 :(得分:2)

根据标准(N4140):

  

8.3.6默认参数
...
   10 虚函数调用(10.3)使用确定的虚函数声明中的默认参数   通过表示对象的指针或引用的静态类型。派生类中的重写函数   不会从它覆盖的函数中获取默认参数。 [示例:

struct A {
    virtual void f(int a = 7);
};
struct B : public A {
    void f(int a);
};
void m() {
    B* pb = new B;
    A* pa = pb;
    pa->f(); // OK, calls pa->B::f(7)
    pb->f(); // error: wrong number of arguments for B::f()
}
     

-end example]

答案 1 :(得分:1)

通过指向create MyTable ( ID int primary key identity(1,1), ... ) 的指针调用该函数。参数的默认值是清楚 10。

因为函数是虚函数,所以基于指向对象的动态类型Figura,使用函数的派生版本最多。动态类型的默认参数不作为标准使用,已由AlexD引用,状态。

P.S。

  

它调用第二个函数pomak(不是虚函数)

Skakac也是虚拟的。

  

我该如何解决?

如果通过“修复它”意味着“我如何覆盖默认参数”,那么我建议使用重载而不是默认参数:

Skakac::pomak