c++ - 如何重载 I/O 运算符 C++

标签 c++ operator-overloading

我创建了一个类,允许用户输入他们的邮寄地址、订购日期、订购的 cookie 类型和数量。还有其他错误,但我迟到了,在我教授的帮助下,我已经修复了它们。现在剩下的就是我需要能够更改代码以重载 I/O 流运算符,以便可以在标准输入和输出语句中使用对象。

我不确定每个人都需要查看代码的所有部分,但我将发布我认为我正在尝试做的事情需要的部分。

我需要在 output() 中找到它,我有 cout << order << endl;我会查看网络,希望能在今晚之前准备好。感谢大家的投入。

由于类的其他学生复制我的代码片段来完成他们的工作,被指示删除我的代码(知道这是可能的,但没有考虑过)

但是,我的代码是完整的。

最佳答案

实现两个功能: basic_ostream & operator<< (basic_ostream& ostr, const CookieOrder& co) basic_istream & operator>> (basic_istream& istr, CookieOrder& co)

operator<<=使用 cout << order << endl; 时将调用函数和 operator>>使用 >> 时将调用函数(流提取)运算符。在实现流提取运算符时要非常小心。

您可能希望将其中任何一个声明为 friendCookieOrder ,因为这将允许函数访问类的私有(private)部分,就好像函数是类的成员一样。


编辑以响应问题中的变化

像以前一样删除你的类:

class CookieOrder {
public:
// public methods as before
private:
// private parts as before
};
basic_ostream & operator<< (basic_ostream& ostr, const CookieOrder& co);
basic_istream & operator>> (basic_istream& istr, CookieOrder& co);

仅使用 CookieOrder 类的公共(public)接口(interface)实现这两个函数。

例如:

basic_ostream & operator<< (basic_ostream& ostr, const CookieOrder& co)
{
ostr << co.get_customerName() << endl;
/* the rest of the output */
}

这些函数不是 CookieOrder 类的成员,它们是普通函数,没有对 CookieOrder 类或类实例的特殊访问权限。

关于c++ - 如何重载 I/O 运算符 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875542/

相关文章:

c++ - 代码块和 lambdas c++11

使用 shared_ptr 函数模板的 C++ 实例化

c++ - Windows Phone 8 流

c++ - R并行写入SEXP结构

c++ - 确定在 C++ 代码中调用了哪些复制构造函数

c++ - 重载ostream运算符c++时出错

c++ - 'operator==' 具有自己的类和 std::string_view 的不明确重载

C++ 运算符重载。从重载中获取私有(private)值的函数

c++ - 使用 QNetworkManager 时内存访问错误

c++ - 在 C++ 中为两个参数使用 const 覆盖运算符