#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;
}
分享到:
相关推荐
同样,为了使分数能够以友好的方式显示给用户,我们也重载了输出流操作符(`)。 ```cpp ostream& operator(ostream& ostr, Franction& y) { ostr ; return ostr; } ``` **解析:** - 函数接受一个`ostream`对象和...
正确、合理地重载操作符可以使类的行为更符合用户的直觉,提高代码的优雅度。但在设计和实现时,需要注意重载的合理性和效率,避免引入不必要的复杂性。理解并熟练掌握操作符重载,对于提升C++编程水平至关重要。
在C++编程语言中,运算符重载和输入输出流重载是两个非常重要的特性,它们使得我们可以根据自己的需求自定义运算符的行为以及输入/输出的过程。本篇将详细讲解如何利用构造函数和友元函数来实现这些功能。 首先,**...
7. **搜索顺序** 重载操作符的查找遵循特定的范围,从类成员到全局函数,再到所在名字空间的函数,然后是右操作数所在名字空间的函数,最后是友元函数。 8. **行为一致性** 重载操作符应尽可能模仿其在内置类型上的...
C++标准输入输出流 C++标准输入输出流是C++语言中数据输入和输出的基础部分,包括标准输入设备键盘、标准输出设备显示器、外存磁盘上的文件和内存中指定的字符串存储空间等几个方面。C++语言系统为实现数据的输入和...
- 输入操作符`>>`(析取操作符)从输入流中抽取数据,输出操作符`(插入操作符)将数据插入输出流。两者都是可重载的,使得自定义类型可以支持标准I/O操作,例如`std::cout ;`。 掌握操作符优先级和可重载性对于...
- **输入输出**: `cin`通过重载`>>`操作符来进行输入,而`cout`、`cerr`和`clog`通过重载`操作符来进行输出。 **3. 输入输出格式控制** - **格式控制符**: `ios`类中定义了一系列格式控制符,这些控制符用于控制...
根据规则,重载操作符必须至少有一个类类型或枚举类型的操作数,这意味着它们不能用于改变内置类型的原始行为。例如,尝试重载两个整数相加的操作符`int operator+(int, int)`是不被允许的。 在设计类的重载操作符...
我们经常需要将对象输出到控制台,C++标准库提供了`std::cout`对象,通过重载`操作符,我们可以让类的对象可以直接与`cout`进行输出: ```cpp class Point { // ... friend std::ostream& operator(std::...
在C++中,通过重载操作符,我们可以为自定义类型赋予与内置类型相似的操作方式,使得代码更加直观。本章主要讲解了C++中的操作符重载机制及其应用。 操作符重载的基本原则是将操作符的功能实现转化为函数代码的实现...
1. **左操作数为流**:与输入操作符不同,输出操作符`的左操作数总是输出流(如`std::ostream`),右操作数是我们要输出的对象。 2. **非成员函数**:虽然可以作为成员函数重载,但通常推荐将其作为非成员函数,...
【C++的输入输出流】 C++的输入输出流是C++编程中处理数据进出程序的核心机制。在第13章中,我们将探讨如何利用C++进行输入输出操作,主要包括标准输出流、标准输入流、文件操作以及字符串流。 1. **C++的输入和...
2. **不能改变操作符的优先级和结合性**:重载操作符不会改变其在表达式中的行为,如优先级和结合性。 3. **某些操作符不能重载**:如`new`, `delete`, `::`, `sizeof`, `...`等,这些操作符不能被重载。 4. **防止...
流可以是输入流、输出流或输入输出流。C++中包含几个预定义的流对象,包括标准输入流cin、标准输出流cout、非缓冲型的标准出错流cerr和缓冲型的标准出错流clog。 C++的流类库的基本结构包括ios流基类、istream输入...
- **类型安全性**:与C语言中通用的文件指针不同,C++的输入输出流提供了专门针对不同类型数据的操作方法,如`>>`和`运算符,这些操作符能够根据数据类型自动转换,从而提高了类型安全性。 **6.2.2 易用性增强** -...
标准C++库提供了许多操作符重载来简化流的使用,如(插入操作符)和>>(提取操作符)。例如,`cout , World!"` 将输出"Hello, World!",而`cin >> name`可以从标准输入读取一个字符串到变量name。 除了基本的输入...
3. **易扩展**:C++通过运算符重载使得流操作符`和`>>`能方便地用于插入(输出)和提取(输入)操作,这使得扩展新的I/O功能变得简单。 流类库还包含了`streambuf`类,这是一个抽象的流缓冲区基类,它提供了流和...