我一直在读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/