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

时间:2009-12-09 17:34:08

标签: c++ operator-overloading

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

我不确定每个人都需要看到的代码的所有部分,但我会发布我认为需要的部分,以便我正在尝试做什么。

我需要把它放在输出()的位置,我有cout << order << endl;我会查看网络,并希望在今晚准备就绪。感谢大家的投入。

由于课堂上的其他学生复制我的代码片段来完成他们的工作(已知有可能但没有想到),因此被指示删除我的代码

但是,我的代码已经完成了。

3 个答案:

答案 0 :(得分:1)

就比较而言,你最好比较所有上部或所有下部(而不是每个单词的第一个字母上部),设置方法更简单。

此外,您应养成在代码周围添加大括号的习惯

为什么你的循环中有一个神奇数字6?特别是当你只有五(5)个元素时。

也许循环应该是

...

int loop_size = sizeof(flavors)/sizeof(flavors[0]);

for (int i = 0; i < loop_size; ++i)

{

   if (flavors[i] == cookieOrdered)
   {
       valid_option = true;
       break;
  }

}

答案 1 :(得分:1)

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

使用operator<<=时将调用cout << order << endl;函数,并且在使用operator>>(流提取)运算符时将调用>>函数。如何实现流提取操作符非常小心。

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


编辑以回复问题中的更改

像以前一样照顾你的班级:

  

class CookieOrder {
    市民:
      //如前所述的公共方法     私人:
      //以前的私人部分
  };
  basic_ostream&amp;运营商LT;&LT; (basic_ostream&amp; ostr,const CookieOrder&amp; co);
  basic_istream&amp;运营商GT;&GT; (basic_istream&amp; istr,CookieOrder&amp; co);

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

例如:

  

basic_ostream&amp;运营商LT;&LT; (basic_ostream&amp; ostr,const CookieOrder&amp; co)
  {
     ostr&lt;&lt; co.get_customerName()&lt;&lt; ENDL;
     / *输出的其余部分* /
  }

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

答案 2 :(得分:0)

提示:在C ++中查找不区分大小写的字符串比较