9/24/2008

預設值和多型的陷阱

class A {
  virtual void f(int i = 10);
};

class B: public A {
  void f(int i = 20);
};

A* a = B();
a->f();
這題多型很簡單 a->f()會呼叫class B裡的f()
但問題是如果印i出來 值會是多少呢

答案是i = 10
原因是預設引數是在編譯時期根據a的型別確定了
所以i就被初始為10
最後印出來就是10了

沒有留言: