2017-02-12 27 views
5

'de operatör,'. 'için aşırı yüklenme varsa, zorlukla karşılaştığınız zorluklar için stroustrup'tan gelen açıklamayı anlamakta zorlanıyorum. izin verildi.Dot 'aşırı yüklenemedi.' C++

Operatör:

Bjarne Stroustrup bu teklifi bakın. (nokta) prensip olarak -> için kullanılanla aynı tekniği kullanarak aşırı yüklenebilir. Bununla birlikte, böyle bir işlemin, bir nesnenin aşırı yüklenmeye yönelik olup olmadığı hakkında sorular sorabilir. veya tarafından atıfta bulunulan bir nesne. Örneğin: x.f() yürütülürken

class Y { 
public: 
    void f(); 
    // ... 
}; 

class X { // assume that you can overload . 
    Y* p; 
    Y& operator.() { return *p; } 
    void f(); 
    // ... 
}; 

void g(X& x) 
{ 
    x.f(); // X::f or Y::f or error? 
} 

Yukarıdaki örnekte neden herhangi bir karışıklığı olmalıdır? İşte

Y& operator.() { return *p; } 

bence budur.

  1. operatörü() o sarih ve sezgisel Y& operator.()(return *p; } denilen gerektiğini dolayısıyla isnt x üzerine denir? tip Y itiraz işaret *p döndükten sonra
  2. ve dolayısıyla Y::f() nihayet çağrılmalıdır

i stroustup en açıklamasında ne Eksik (X::f() değil)? Neden bu kadar basit değil?

+0

"dolayısıyla" Y :: f() 'nihayet çağrılmalıdır." Fakat bu kodu okuyan birine kafa karıştırıcı değil mi? Normalde 'x.f()' 'x'''''''' olarak çağırır, ancak bu durumda olmaz. –

+0

@ScottHunter Örnek, Stroustrup'tan geliyorsa ve kafa karışıklığını göstermesi gerekiyorsa, kafa karıştırıcı olmamalıdır :)? – AlexD

+0

Bu [SO question] (http://stackoverflow.com/questions/520035/why-cant-you-overload-the-operator-in-c) aynı sorun hakkında konuşur. –

cevap

İlgili konular