2017-02-16 66 views
0
#include<iostream.h> 
#include<conio.h> 
class time 
{ 
    private: 
     int dd,mm,yy; 
    public: 
     friend istream & operator >>(istream &ip,time &t) 
     { 
      cout<<"\nEnter Date"; 
      ip>>t.dd; 
      cout<<"\nEnter Month"; 
      ip>>t.mm; 
      cout<<"\nEnter Year"; 
      ip>>t.yy; 
      return ip; 
     } 
     friend ostream & operator <<(ostream &op,time &t) 
     { 
      op<<t.dd<<"/"<<t.mm<<"/"<<t.yy; 
      return op; 
     } 

     void validate(); 
}; 

void time::validate() 
{ 
} 
int main() 
{ 
    clrscr(); 
    time t1; 
    cin>>t1; 
    cout<<t1; 
    getch(); 
    return 0; 
} 

它有什麼不同?當我在類之外定義好友功能時,編譯器給出了一個錯誤,但是當我在一個類中定義它時,它工作得很好。課內和課外的朋友功能,它有什麼不同?

注意:我正在使用Turbo C++。我知道那是一所老學校,但我們必然會使用它。

+1

''不是標準標題。它從未成爲標準的一部分。但在1998年的第一個標準之前,它是C++非官方定義的一部分,在註釋參考手冊中(由Stroustrup和Ellis提供)。 –

+0

'conio.h'是平臺特定的非標準標頭。這與你的問題有關嗎? –

+0

編譯器給出了什麼錯誤? – Aeonos

回答

2

問題是,您正在訪問您班級的私人成員(dd,mm,yy),只允許該班級或朋友的功能。所以你必須在類中聲明這個函數是一個朋友,並且它可以在類之外實現。

class time 
{ 
private: 
    int dd,mm,yy; 
public: 
    friend istream & operator >>(istream &ip,time &t); // declare function as friend to allow private memeber access 
    friend ostream & operator <<(ostream &op,time &t); // declare function as friend to allow private memeber access 

    void validate(); 
}; 

現在您可以在類的外部編寫實現並訪問私有變量。

istream & operator >>(istream &ip,time &t) 
{ 
    cout<<"\nEnter Date"; 
    ip>>t.dd; 
    cout<<"\nEnter Month"; 
    ip>>t.mm; 
    cout<<"\nEnter Year"; 
    ip>>t.yy; 
    return ip; 
} 

ostream & operator <<(ostream &op,time &t) 
{ 
    op<<t.dd<<"/"<<t.mm<<"/"<<t.yy; 
    return op; 
} 
+0

@Biffen - 謝謝,我糾正了我的錯誤。私有成員變量不能被派生類訪問 – Aeonos