簡體   English   中英

C ++賦值運算符解析

[英]C++ assignment operator resolving

考慮以下代碼:

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 =沒有?

您所看到的根本不是隱藏的問題。 您沒有創建將B分配給B的賦值運算符,因此編譯器為您創建了一個。 編譯器創建的一個正在調用A的賦值運算符。

因此,如果您的問題是“問題:為什么B :: foo隱藏A :: foo,而B :: operator =沒有?” 應該讀為“ operator =與普通函數有何不同”,不同之處在於,如果您不編寫自己的函數,編譯器將為您提供一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM