2015-01-04 17 views
5

Trong một lớp, nếu hàm này được khai báo là bạn trong bộ định danh khác nhau như - riêng tư, được bảo vệ hoặc công khai, thì có sự khác biệt nào. Theo hiểu biết của tôi, chức năng của bạn bè không phải là thành viên. Do đó, nó không quan trọng. Nhưng, nếu tôi thấy tĩnh - nó cũng không phải là một thành viên, nhưng truy cập specifier vấn đề rất nhiều. Vì vậy, tôi là một chút bối rối. Làm thế nào tất cả các mã hoạt động tốt? Có sự khác biệt nào giữa các lớp sau không?Trình định danh truy cập có quan trọng đối với chức năng của bạn bè không?

/** 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

* "Nhưng, nếu tôi thấy tĩnh - nó cũng không phải là thành viên" * - Có. Nó là. –

+0

Tĩnh là một thành viên của lớp và không phải là thành viên của đối tượng. –

+0

Thuật ngữ "thành viên đối tượng" không tồn tại trong tiêu chuẩn C++. Có các thành viên lớp tĩnh và các thành viên lớp không tĩnh. –

Trả lời

5

Không, không quan trọng.

C++ chuẩn, phần § 11,3/9 [friend.class]

Ý nghĩa của việc kê khai người bạn là như nhau cho dù việc kê khai người bạn xuất hiện trong tư nhân, bảo vệ hoặc của cộng đồng (9.2) phần của đặc tả thành viên lớp.

Lưu ý:

Một chức năng tĩnh khai báo bên trong lớp vẫn là thành viên lớp. Chức năng của bạn bè thì không.

+0

Tại sao lại là vấn đề tĩnh? –

+2

@dexterous_stranger: Chức năng của bạn bè không phải là chức năng của thành viên. 'static' là một công cụ sửa đổi cho một thành viên lớp. Một tuyên bố tình bạn không khai báo một thành viên, nó chỉ cấp quyền truy cập đặc biệt cho một hàm không phải thành viên (của lớp hiện hành). – quantdev

Các vấn đề liên quan