作者adrianshum (Alien)
看板Programming
标题Re: [问题] 请问Overriding 是否只能override父 Cl …
时间Mon Jun 18 10:52:28 2007
※ 引述《sorryChen (陈扬和)》之铭言:
: 我试了一下 好像不行(虽然我的用法有点怪怪的 我用Visual C++.net)
: Class C 继承 Class B 继承 Class A
: Class A定义了function f1() f2()
: f1()中会Call f2()
: 我现在在Class C中define 同名同参数的f2() 假设叫他f2'()
: 希望 在call C.A1()时 会自动Call f2'(); 而不是f2();
: 这样有可能吗 如果可以其实有点小危险 就是子class不小心Override
: 爷爷辈以上的同名程式... (可能不知道爷爷辈以上有什麽method..)
: 真是非常感谢版友们的回答阿 ..C++有Virtual..所以确定要下Virtual
: 才是真正Overrideing 而不是hiding.. 但是对於爷爷辈以上
: 好像还是不行..(我试的结果.. 应该友其他方法才是
: ※ 引述《horngsh (要公理要正义)》之铭言:
: : 不好意思, 你问的是C++, 我以为是C#, 在C++中要覆写父层以上的方法
: : 只要在衍生类别中用相同的签名加上方法定义即可
: : (不用再加virtual, 除非你以後还要让再衍生的类别再覆写)
不会不行吧? 这种作法在写 template method
那种 pattern 常会用到
class GrandFather {
public:
foo() { onFoo(); };
protected:
virtual onFoo() { cout << "GrandFather" <<endl; };
}
class Father: GrandFather{
}
class Child: Father {
protected:
virtual onFoo() { cout << "Child" << endl; }
}
GrandFather * grandPa = new Child();
grandPa->foo();
结果该会是印出 Child 呀...
还没有测试但你可以拿来修一修试试
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.22.246.26