1

考虑以下代码:

struct A
{
    void foo( const char * ) { cout << __PRETTY_FUNCTION__ << endl; }
    A & operator = ( const A &  ) { cout << __PRETTY_FUNCTION__ << endl; return * this; }
};


struct B : public A
{
    void foo( const char * ) { cout << __PRETTY_FUNCTION__ << endl; }
    A & operator = ( const A & other ) { cout << __PRETTY_FUNCTION__ << endl; return * this; }
};

然后当我们调用这个成员时:

B b;

b.foo( "hehe" );
b = b;

将打印:

void B::foo( const char *)
A& A::operator=(const A&)

问题:为什么 B::foo 隐藏了 A::foo,而 B::operator= 没有?

4

1 回答 1

8

你所看到的根本不是一个隐藏的问题。您没有创建一个赋值运算符来将 B 分配给 B,因此编译器为您创建了一个。编译器创建的是调用 A 的赋值运算符。

因此,如果您的问题“问题:为什么 B::foo 隐藏了 A::foo,但 B::operator= 没有?” 应该阅读“operator= 与普通函数有何不同”,不同之处在于如果您不自己编写,编译器会为您提供一个。

于 2010-12-06T13:36:22.397 回答