SORU
7 Ocak 2011, Cuma


Operatör yükleme : üye olmayan fonksiyon?vs işlevi üyesi

Aşırı yüklü operatör üye fonksiyonu yalnızca tek bir parametre var çünkü asimetrik olarak ilan etti ve diğer parametre otomatik olarak geçirilen olduğunu okumuştum 'this' işaretçi. Standart bir mukayese var. Diğer taraftan, aşırı yüklü operatör arkadaş aynı türden iki argüman geçeriz çünkü simetrik ve dolayısıyla, karşılaştırılabilir olarak ilan etti. Soruma hala bir başvuru için bir işaretçi. lvalue karşılaştırabilirsiniz arkadaşlar neden tercih edilir? (simetrik olarak aynı sonuçları verir asimetrik bir sürümünü kullanıyor) Neden STL algoritmaları sadece simetrik sürümlerini kullanıyor musunuz?

CEVAP
7 Ocak 2011, Cuma


Eğer Üye olarak operatör aşırı yüklenmesi fonksiyon tanımlamak fonksiyon varsa, o zaman derleyici s1.operator (s2) s1 s2 gibi ifadeler çevirir.Bu, aşırı üye işlevi operatörün ilk işlenen çağrılan alır demektir.Üye fonksiyonları nasıl çalışır!

Ama eğer ilk işlenen bir sınıf değilse ne?Eğer ilk işlenen sınıf bir tür değil, bir operatör aşırı yükleme yapmak istiyorsak büyük bir sorun var, söyle double değil.Bu gibi 10.0 s2 yazmak. Ancak, s1 10.0 gibi ifadeler için operatör aşırı üye işlev yazabilirsiniz.

Bunu çözmek içinsiparişsorun, EĞER private üye erişim ihtiyacı friend operatör aşırı işlevi tanımlayın. Bunu özel üyelere erişmek için gereken SADECE friend olun. Aksi takdirde sadece onu yapınolmayan arkadaşı olmayan üyesiişlevigeliştirmeksaklama!

class Sample
{
 public:
    Sample operator   (const Sample& op2); //works with s1   s2
    Sample operator   (double op2); //works with s1   10.0

   //Make it `friend` only when it needs to access private members. 
   //Otherwise simply make it **non-friend non-member** function.
    friend Sample operator   (double op1, const Sample& op2); //works with 10.0   s2
}

Bu okuyun :
A slight problem of ordering in operands
How Non-Member Functions Improve Encapsulation

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • filmurfreakur

    filmurfreaku

    29 Mart 2007
  • katherine gomez

    katherine go

    1 Aralık 2011