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
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
Operatör<< gerekir; bir üyesi ola...
Kopya yapıcı ve C = operatör aşırı yük...
C# operatör aşırı yükleme için " ...
Fonksiyon Javascript - en İyi uygulama...
Yükleme-iyi-oluşturulmuş olmayan zaman...