首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于操作符重载的有关问题

2013-02-24 
关于操作符重载的问题本帖最后由 discory 于 2013-02-18 16:08:16 编辑#include iostreamusing std::cou

关于操作符重载的问题
本帖最后由 discory 于 2013-02-18 16:08:16 编辑

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;

#include <iomanip>
using std::setw;

class PhoneNumber
{
friend ostream &operator <<( ostream&, const PhoneNumber & );
friend istream &operator >>( istream&, const PhoneNumber & );

private:
char areaCode[ 4 ];//3-digit area code and null
char exchange[ 4 ];//3-digit exchange and null
char line[ 5 ];//4-dighit line and null
};

//Overloaded stram-insertion operator( cannot be 
//a member function if we would like to invoke it with 
//cout << somePhoneNumber; )
ostream &operator <<( ostream &output, const PhoneNumber &num )
{
output << "(" << num.areaCode << ")"
<< num.exchange << "-" << num.line;
return output;//enables cout << a << b << c;
}

istream &operator >>( istream &input, const PhoneNumber &num )
{
input.ignore();//skip (
input >> setw( 4 ) >> num.areaCode;//这里报错
input.ignore( 2 );//skip )
input >> setw( 4 ) >> num.exchange;//这里报错
input.ignore();//skip dash (-)
input >> setw( 5 ) >> num.line;//这里报错
return input;//enables cin >> a >> b >> c;
}

int main()
{
PhoneNumber phone;//create object phone

cout << "Enter phone number in the form (123) 456-7890: \n";

//cin >> phone invokes operator >> function by
//issuing the call operator >>( cin, phone ).
cin >> phone;

//cout << phone invokes operator << function by 
//issuing the call operator <<( cout, phone ).
cout << "The phone number entered was: " << phone << endl;
system("pause");
return 0;
}

提示说操作符重载未匹配,不明白
input >> setw( 4 ) >> num.areaCode;//input area code
IntelliSense: 没有与这些操作数匹配的 ">>" 运算符
          操作数类型为: std::basic_istream<char, std::char_traits<char>> >> const char [4]d:\ex\25\main.cpp372125

[解决办法]
istream没有提供从流输入字符数组的重载,可以考虑scanf,当然,要注意缓冲区大小,还有PhoneNumber 里面的字符数组需要初始化一下
scanf("(%3c)%3c-%4c", num.areaCode, num.exchange, num.line);



顺便
friend istream &operator >>( istream&, PhoneNumber & );


const了怎么修改内容?
[解决办法]
friend istream &operator >>( istream&, const PhoneNumber & );
被const打败了

热点排行
Bad Request.