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

  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • ShoSho

    ShoSho

    20 Ocak 2010