运算符重载'<<'和'>>'以及字符串

operator overloading '<<' and '>>' and a string

本文关键字:gt lt 字符串 重载 运算符      更新时间:2023-10-16

我试图超载操作员在项目类上起作用,并且由于字符串而遇到了一些困难。这将分为标题和另一个文件。(编辑:糟糕,对不起。)

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
class item
{
private:
    string itemName;
public:
    string getitemName() const;
    friend std::istream &operator >> (std::istream & instr, const item& R);
    friend std::ostream &operator << (std::ostream & outst, const item& P);
};
string item::getitemName() const
{
return itemName;
}

std::istream& operator >> (std::istream& instr, const item& R)
{
instr >> R.getitemName();
return instr;
}
std::ostream& operator << (std::ostream& outst, const item& P)
{
outst << P.getitemName();
return outst;
}
  1. >>操作员将突变item,因此必须将其传递给对可变的,而不是const。

  2. item已将流动运算符的功能称为朋友,因此他们不受限制地访问内部状态。

-

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
class item
{
private:
    string itemName;
public:
    friend std::istream &operator >> (std::istream & instr, item& R);
    friend std::ostream &operator << (std::ostream & outst, const item& P);
};
std::istream& operator >> (std::istream& instr, item& R)
{
instr >> R.itemName;
return instr;
}
std::ostream& operator << (std::ostream& outst, const item& P)
{
outst << P.itemName;
return outst;
}

使用 getItemName(),您获得了一个值,而不是对其的参考。
您正在做

之类的事情
instr>>"hello"

这没有任何意义,因为"你好",就像 getItemName()的结果是 rvalue一样。

您应该这样做:

std::istream& operator >> (std::istream& instr, const item& R){
    instr >> R.itemName;
    return instr;
}

该方法是friend,因此可以访问您的私人会员而不会出现问题!

有关rvalueslvalues的更多信息,您可以在此处检查