在这种情况下,我们可以使用静态而不是朋友吗?其他解决方案是什么

时间:2018-06-20 23:40:52

标签: c++ static friend

当我在PhoneNumber.h中使用friend作为操作员功能时,PhoneNumber.cpp表现良好。但是使用static时,它不能被编译(为什么?),以及声明它的其他方法是什么(即,除了Friend以外的所有方法)。

PhoneNumber.h

#include<iostream>
#include <string>
#include<iomanip>
using namespace std;
class PhoneNumber{
    public:
    string areaCode, exchange, line;
    static ostream& operator<<(ostream &output, const PhoneNumber&);
    static istream& operator>>(istream &input, PhoneNumber&);
};

PhoneNumber.cpp

#include"PhoneNumber.h"
using namespace std;

ostream& PhoneNumber::operator<<(ostream &output, const PhoneNumber& obj){
    output << "(" <<obj. areaCode << ") "
    << obj.exchange << "-" << obj.line;
    return output;
};


istream& PhoneNumber::operator>>(istream &input, PhoneNumber&obj){

    input.ignore(); 
    input >> setw( 3 ) >> obj.areaCode;
    input.ignore( 2 );
    input >> setw( 3 ) >> obj.exchange;
    input.ignore();
    input >> setw( 4 ) >> obj.line;
    return input;
    };

main.cpp

#include"PhoneNumber.h"
using namespace std;

int main(){

PhoneNumber phone;
 cout << "Enter phone number in the form (123) 456-7890:" << endl;
cin>>phone;
cout << "The phone number entered was: ";
cout<<phone;cout << endl;
int y;cin>>y;
return 0;}

1 个答案:

答案 0 :(得分:0)

重载的运算符不能是静态成员函数,请参见[over.oper](强调是我的)。

  

操作员函数应为非静态成员函数或为非成员函数,其至少具有一个类型为类,对类的引用,枚举,或对枚举的引用。