0

为什么 B::Func 可以使用使其看起来像静态方法调用的语法来调用 A::Func?这不应该因为它是一个实例方法而失败吗?

class A {
public:
    void Func() { 
        printf( "test" );
    }
};

class B : private A {
public:
    void Func() {
        A::Func();  // why does it work? (look below in main())
    }
};

int main() {
    B obj;

    obj.Func();
    // but we cannot write here, because it's not static
    // A::Func();

    return 0;
}
4

1 回答 1

5

那不是“像静态一样”。这只是用于显式指定调用哪个成员函数的语法。即使Func是虚拟的,该语法也可用于调用基类版本。

class B : public A {
public:
    void Func() {
        this->A::Func(); /* this-> can be omitted */
    }
};

int main() {
    B obj;
    obj.A::Func();
    return 0;
}

编辑:obj.A::Func()在你的情况下实际上是无效的,因为继承是私有的,所以main看不到它AB. 我已将B' 继承更改为 public 以使答案正确,但在函数中时,它仍然可以在类之外工作friend

于 2012-07-25T20:25:44.890 回答