2015-01-04 8 views
5

Bir sınıfta, işlev, özel, korunan veya herkese açık olarak farklı belirticinin içinde arkadaş olarak bildirilirse, o zaman herhangi bir fark vardır. Anlayışım gereği, arkadaş fonksiyonu üye değildir. Dolayısıyla, önemli olmamalı. Ancak, statik görüyorsam - aynı zamanda bir üye değildir, ancak erişim belirteci çok önemlidir. Yani, biraz kafam karıştı. Bütün bu kodlar nasıl çalışır? Aşağıdaki sınıflar arasında bir fark var mı?Erişim belirteci bir arkadaş fonksiyonu için önemli mi?

/** Private friend function **/ 

class frienddemoFunction 
{ 
    private: 
     unsigned int m_fanSpeed; 
     unsigned int m_dutyCycle; 
     /** This function is not a member of class frienddemo **/ 
     friend void printValues(frienddemoFunction &d); 

    public: 
     void setFanSpeed(unsigned int fanSpeed); 
     unsigned int getFanSpeed(); 

}; 


/** Protected -- Friend Function **/ 
class frienddemoFunction 
{ 
    private: 
     unsigned int m_fanSpeed; 
     unsigned int m_dutyCycle; 

    public: 
     void setFanSpeed(unsigned int fanSpeed); 
     unsigned int getFanSpeed(); 

protected: 

/** This function is not a member of class frienddemo **/ 
     friend void printValues(frienddemoFunction &d); 


}; 

class frienddemoFunction 
{ 
    private: 
     unsigned int m_fanSpeed; 
     unsigned int m_dutyCycle; 

    public: 
     void setFanSpeed(unsigned int fanSpeed); 
     unsigned int getFanSpeed(); 

/** This function is not a member of class frienddemo **/ 
     friend void printValues(frienddemoFunction &d); 


}; 


/** This function is not a member of class frienddemo **/ 
    friend void printValues(frienddemoFunction &d); 
+2

* "Ancak, statik görüyorsam da üye değil" * - Evet. Bu. –

+0

Statik, bir nesne üyesi değil, bir nesne üyesidir. –

+0

"Nesne üyesi" terimi C++ standardında mevcut değil. Statik sınıf üyeleri ve statik olmayan sınıf üyeleri vardır. –

cevap

5

Hayır, önemli değil.

standart C++, bölüm 11.3/9 [friend.class]

§ Arkadaş beyan anlamı arkadaşı beyan korunan özel veya kamu (9.2) kısım görünür da aynıdır sınıf üye spesifikasyonunun.

Not: sınıf içerisinde bildirilen

Statik fonksiyon hala sınıf üyesidir. Bir arkadaş fonksiyonu değildir.

+0

Statik neden bu kadar önemli? –

+2

@dexterous_stranger: Bir arkadaş işlevi üye işlev değildir. "statik" bir sınıf üyesi için bir değiştiricidir. Bir arkadaşlık beyanı bir üye ilan değil, sadece (mevcut sınıfın) üyesi olmayan bir üye için özel erişim hakları verir. – quantdev