2013-08-19 24 views
24

我們可以聲明一個類的構造函數是朋友嗎?我認爲這不可能。但是我在某處讀到它可以,但我無法做到。如果可以,請提供一些示例代碼。構造函數可以成爲C++中的朋友嗎?

+0

你爲什麼不宣佈全班同學是朋友? – wilx

+0

發佈您的代碼。 –

+1

@KolyolyHorvath:這在一般情況下很有用,但你會在這裏展示什麼? '朋友<這裏有什麼>;'?這並沒有增加任何問題。 – MSalters

回答

30

是它可以:

class Y 
{ 
public: 
    Y(); 
}; 
class X 
{ 
private: 
    void foo() {} 
    friend Y::Y(); 
}; 
Y::Y() 
{ 
    X x; x.foo(); 
} 

作爲每

11.3好友[class.friend]

5)當朋友聲明是指一個重載名稱或操作員,只指定功能由參數類型變成朋友。 一類X的 成員函數可以是一個類Y的朋友

[實施例:

class Y { 
friend char* X::foo(int); 
friend X::X(char); // constructors can be friends 
friend X::~X(); // destructors can be friends 
}; 

末端示例]

(重點煤礦)

+2

+1,用於從標準中挖掘示例:) – SteveLove

+0

is this valid 'class Y { public: friend Y(int); }' 如果是,你將如何定義Y(int); – Shreyas

+3

@Shreyas沒有意義,爲什麼一個班級(或成員)成爲自己的朋友? –

相關問題