C ++赋值运算符解析

时间:2010-12-06 13:30:20

标签: c++ assignment-operator member-hiding

请考虑以下代码:

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 =不隐藏?

1 个答案:

答案 0 :(得分:8)

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

因此,如果您的问题“问题:为什么B :: foo隐藏A :: foo,但B :: operator =不?”应该读作“操作符=如何与普通函数不同”,区别在于如果你不编写自己的编译器将为你提供一个。