您的位置:首页 > 编程语言 > C语言/C++

C++中输入输出<< 和>>重载,以便适应输出输入一个对象

2012-08-17 21:58 1261 查看
1重载为友元函数

#include <iostream>

#include <string>

using namespace std;

class MyClass {

private:

string name;

int id;

int prefix;

int value;

public:

MyClass() { };

MyClass(string n, int a, int p, int nm):name(n), id(a), prefix(p), value(nm){} // 利用初始化列表来初始化成员对象

friend ostream &operator<<(ostream &stream, MyClass &o); // 操作符被定义为非成员函数时,要将其定义为所操作类的友员

friend istream &operator>>(istream &stream, MyClass &o);

};

ostream &operator<<(ostream &stream, MyClass &o)

{

stream << o.name << " ";

stream << "(" << o.id << ") ";

stream << o.prefix << "-" << o.value << "\n";

return stream;

}

istream &operator>>(istream &stream, MyClass &o)

{

cout << "Enter name: ";

stream >> o.name;

cout << "Enter id: ";

stream >> o.id;

cout << "Enter prefix: ";

stream >> o.prefix;

cout << "Enter value: ";

stream >> o.value;

cout << endl;

return stream;

}

int main()

{

MyClass a;

operator>>(cin, a); // 相当于operator>>(cin, a)

cout << a; // 相当于operator<<(cout, a)

return 0;

}

2重载为成员函数

#include <iostream>

#include <string>

using namespace std;

class MyClass {

private:

string name;

int id;

int prefix;

int value;

public:

MyClass() { };

MyClass(string n, int a, int p, int nm):name(n), id(a), prefix(p), value(nm){} // 利用初始化列表来初始化成员对象

ostream &operator<<( MyClass &o); // 操作符被定义为成员函数时,要将其定义为所操作类的友员

istream &operator>>( MyClass &o);

};

ostream &operator<<(ostream &stream, MyClass &o)

{

stream << o.name << " ";

stream << "(" << o.id << ") ";

stream << o.prefix << "-" << o.value << "\n";

return stream;

}

istream &operator>>(istream &stream, MyClass &o)

{

cout << "Enter name: ";

stream >> o.name;

cout << "Enter id: ";

stream >> o.id;

cout << "Enter prefix: ";

stream >> o.prefix;

cout << "Enter value: ";

stream >> o.value;

cout << endl;

return stream;

}

int main()

{

MyClass a;

operator>>(cin, a); // 相当于operator>>(cin, a)

cout << a; // 相当于operator<<(cout, a)

return 0;

}

注意:重载为类的友元函数和类的成员函数的区别就是,对于重载为类成员函数来讲的话,该操作符的左边的操作数是该类的一个对象,而友元可以是另外的一个类对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐