课堂内外的朋友功能,它有什么区别?

时间:2017-02-16 05:46:41

标签: c++ oop operator-overloading

#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 个答案:

答案 0 :(得分:3)

问题是,你正在访问你班级的私人成员(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;
}