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;
}
注意:重载为类的友元函数和类的成员函数的区别就是,对于重载为类成员函数来讲的话,该操作符的左边的操作数是该类的一个对象,而友元可以是另外的一个类对象
#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;
}
注意:重载为类的友元函数和类的成员函数的区别就是,对于重载为类成员函数来讲的话,该操作符的左边的操作数是该类的一个对象,而友元可以是另外的一个类对象
相关文章推荐
- 《C++第九周实验报告1-1》--------接第8周任务1,定义Complex类中的<<和>>运算符的重载,实现输入和输出
- 《C++第九周实验报告2-1》---接第8周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出
- c++文件输入输出流fstream,对输入>>和输出<<重载
- 第九周【项目1】在第8周项1的基础上(1)再定义一目运算符 -,-c相当于0-c(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- 第九周试验任务1--定义Time类中的<<和>>运算符的重载,实现输入和输出。
- C++输入操作符>> 输出操作符<<重载
- 第九周实验任务二--定义Complex类中的<<和>>运算符的重载,实现输入和输出,使程序读起来更自然
- 运算符重载(复数运算(+、-、*重载),输入、出类对象(流类运算符>>/<<的重载))
- 第九周C++上机报告(定义Complex类中的<<和>>运算符的重载)
- <仅是自己做笔记。。。系列-14>输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- C++第九周【任务一】定义Complex类中的<<和>>运算符的重载,实现输入和输出
- c语言:有一函数:当x&lt;0,y=-1;x=0,y=0;x&gt;0,y=1;编一程序,输入一个x值,要求输出相应的y值。
- c++ cout控制输出 &lt;转&gt;
- c++ 重载 >>(输入) 、<< (输出) 操作符
- <c++>时间输出
- 【c语言】有一函数:x < 0 ,y = -1;x = 0,y = 0;x > 0,y = 1,编程输入一个x值,要求输出对应的y
- c++ 重载 >>(输入) 、<< (输出) 操作符
- <备忘1003> 一个Android MediaRecorder对象的适配差异
- c++ 重载 >>(输入) 、<< (输出) 操作符
- <C++>迭代器:访问string对象和vector对象