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

标签 c++

我一直在读C++ Primer并遇到了这个关于类的介绍性代码片段:

#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;
}

我有两个问题:

  • 你不必重载operator>>operator<<这段代码要编译的函数?
  • 如果是这样的话,重载对象操作的输入和输出运算符而不是使用构造函数/setter 和 getter 是否被认为是好的做法?我的意思是,这是一件很常见的事情,值得去做吗?

最佳答案

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

您观察到必须为 operator<< 定义重载和 operator>>你自己是对的。但是免费功能很好。
对于运算符重载的所有细节(尽管不是移动语义),有这个问题:Operator overloading

关于c++ - 使用输入和输出运算符读取用户定义类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303706/

相关文章:

c++ - 读取 XML 文件中存储的业务规则的优雅方式

c++ - 使用自定义 makefile 在 Nao 机器人上编译模块

c++ - 在 C++ 中查找未知对象的类型

c++ - 在 C++ 中从可执行路径(或从 hWnd,或从 pid)获取程序名

c++/cli 检查值是否为数字

c++ - Qt GUI 应用程序:如果 QObject::connect() 失败会发出警告?

python - 如何从 python 模块 (boost.python) 导入类?

c++ - QRubberBand,如何选择项目??? QT 文档根本没有帮助

c++ - 使用 C++ REST SDK Casablanca 发送 HTTP POST 请求以更新文件内容

C++ - Noob 二进制文件 IO 问题