我完全知道,我要告訴你的語法是調用例如派生類中的基類方法。但是在我遇到的一些代碼中,在類實現之外使用了相同的語法,我想知道這是否是合法的(在標準C++意義上)結構,以及結果行爲是否已定義好?從非派生代碼調用基本方法,這可能嗎?法律?
class Base
{
public:
virtual void method(int arg)
{
...
}
};
class Derived : public Base
{
public:
virtual void method(int arg)
{
...
Base::method(arg); // I'm fully comfortable with this...
}
};
int main(int argc, char* argv[])
{
Derived d;
Derived* pD = &d;
pD->Base::method(2); // is this allowed?
...
是的,它是允許的。 – Meixner
每次你認爲某件事情不應該是合法的,因爲它是「錯誤的」,請記住,在大多數情況下,C++規則是「相信程序員」:如果程序員錯了,程序員不會這樣做。請記住,如果你真的生氣了,你可以對對象實例「memset」:-D ...如果事情不可能不自覺地發生,就沒有必要禁止它。 – 6502