我真的不明白为什么会这样。
public function dropSoftDeletes()
{
$this->dropColumn('deleted_at');
}
当我调用函数pomak()时,它将dx称为10,虽然它调用第二个函数pomak(而不是虚函数)并且我明确指出dx = 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