Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用输入和输出运算符读取用户定义类型的对象_C++ - Fatal编程技术网

C++ 使用输入和输出运算符读取用户定义类型的对象

C++ 使用输入和输出运算符读取用户定义类型的对象,c++,C++,我一直在阅读并偶然发现关于类的介绍性代码片段: #include <iostream> #include "Sales_item.h" int main() { Sales_item book; // read ISBN, number of copies sold, and sales price std::cin >> book; // write ISBN, number of copies sold, total revenue,

我一直在阅读并偶然发现关于类的介绍性代码片段:

#include <iostream>
#include "Sales_item.h"
int main()
{
    Sales_item book;
    // read ISBN, number of copies sold, and sales price
    std::cin >> book;
    // write ISBN, number of copies sold, total revenue, and average price
    std::cout << book << std::endl;
    return 0;
}
我有两个问题:


不必重载运算符>运算符> P > 1,必须重载istras>和oSrase

1,是,必须重载istras>和oSurrase

C++,这是习惯性C++,在标准库中使用比特移位运算符进行流插入和提取。 这是因为流对象的位移位没有意义- 出于同样的原因,+对于字符串连接也是可以接受的

您的观察结果是,您必须自己为运算符定义重载,这是正确的。但是自由函数是好的。
对于运算符重载的所有细节,虽然不是移动语义,但存在这样一个问题:

< P> >在标准库中使用比特移位运算符进行流插入和提取,这是习惯C++。 这是因为流对象的位移位没有意义- 出于同样的原因,+对于字符串连接也是可以接受的

您的观察结果是,您必须自己为运算符定义重载,这是正确的。但是自由函数是好的。
对于操作符重载的所有细节,尽管不是移动语义,但有一个问题:

如果要流式处理用户定义的类型,则需要重载操作符>。
在我看来,流操作符、getter和setter适用于不同类型的行为,所以你的第二个问题在我看来就像是苹果对桔子的比较。如果希望能够直接从流中填充对象,那么重载流操作符是唯一的方法。否则,您必须首先将数据流转换为基本类型,然后使用变体。当然,您不希望对对象的所有变体使用运算符重载,但仅当您连接到流时。您可能需要使用流重载、getter和setter定义类。这不是一个相互排斥的选择。

如果要对用户定义的类型进行流式处理,则需要重载操作符>。 在我看来,流操作符、getter和setter适用于不同类型的行为,所以你的第二个问题在我看来就像是苹果对桔子的比较。如果希望能够直接从流中填充对象,那么重载流操作符是唯一的方法。否则,您必须首先将数据流转换为基本类型,然后使用变体。当然,您不希望对对象的所有变体使用运算符重载,但仅当您连接到流时。您可能需要使用流重载、getter和setter定义类。这不是一个相互排斥的选择

您不会在特定流上重载类的std::cin和std::cout,而是操作符>

在大多数情况下,您使用getter和setter来操纵数据,但当您希望操纵对象作为一个整体时,操作符重载非常有用,而不仅仅是在简单的cin/cout情况下。你可以把你的物体放到各种各样的流中

您不会在特定流上重载类的std::cin和std::cout,而是操作符>

在大多数情况下,您使用getter和setter来操纵数据,但当您希望操纵对象作为一个整体时,操作符重载非常有用,而不仅仅是在简单的cin/cout情况下。你可以把你的物体放到各种各样的流中


您不会重载对象或类,而是重载函数成员和非成员,在您的例子中是运算符函数。从阅读开始。很可能你会在进一步阅读时找到答案:是的,你必须重载操作符>>和@JoachimPileborg谢谢你的更正。实际上,这就是我的意思,重载操作符,即使我使用了不正确的术语,好像我想重载对象或类。我更新了问题。你没有重载对象或类,你重载函数成员和非成员,在你的例子中是操作符函数。从阅读开始。很可能你会在进一步阅读时找到答案:是的,你必须重载操作符>>和@JoachimPileborg谢谢你的更正。实际上,这就是我的意思,重载操作符,即使我使用了不正确的术语,好像我想重载对象或类。我更新了问题。我希望在开始时能有一些解释,而不是他们所做的,因为这被认为是一篇介绍性的文章,我认为初学者可能会感到困惑。我不知道我是否错过了它,但我也希望有人提到重载运算符,以使该程序能够工作,以防有人想要编译和运行该程序。似乎是一本好书,tho,迫不及待地想看完它:@Varaquilex我不得不说,第一章非常混乱。它只是简单地概述了这本书的内容。我希望在开始时能有一些解释,而不是它们的内容
既然这是一篇介绍性的文章,我想初学者可能会感到困惑。我不知道我是否错过了它,但我也希望有人提到重载运算符,以使该程序能够工作,以防有人想要编译和运行该程序。似乎是一本好书,tho,迫不及待地想看完它:@Varaquilex我不得不说,第一章非常混乱。它只是简单概述了这本书的内容。