【问题标题】:istream >> ostream << Operator Overloading with * Pointeristream >> ostream << 使用 * 指针重载运算符
【发布时间】:2011-08-31 15:05:46
【问题描述】:

如果 >> 和

在标题中:

friend std::istream& operator >>( std::istream& ins, Classname* & e);
friend std::ostream& operator <<( std::ostream& outs, const Classname * e);

在 cpp 中:

std::ostream& operator <<( std::ostream& outs, const Classname * e)
{   // what do I do here?
return outs;
}
std::istream& operator >>( std::istream& ins, Classname* & e){
// what do I do here?
    return ins;
}

【问题讨论】:

  • 好吧,你做什么取决于你想从Classname读/写什么。您可以通过 -&gt; 操作符访问变量,除此之外我不确定您在追求什么。例如:outs &lt;&lt; e-&gt;variable;

标签: c++ pointers operator-overloading istream ostream


【解决方案1】:

这取决于Classname 类中的内容。例如,如果您有:

class Classname {
//...
private:
  int a;
};

..那么你可能会这样做:

std::ostream& operator <<( std::ostream& outs, const Classname * e)
{  
  outs << e->a;
  return outs;
}
std::istream& operator >>( std::istream& ins, Classname* & e){
    ins >> e->a;
    return ins;
}

这个想法是&lt;&lt;&gt;&gt; 运算符理想地应该相互镜像 - 例如,您可以利用它们来序列化和反序列化您的实例。

【讨论】:

  • 非常感谢。试过这个,但现在意识到它崩溃了,因为我传递了一个空值。我需要一些帮助来理解它。 Classname* &amp; e 到底是什么意思?我认为const Classname * e 意味着 e 是指向 const 类名的指针...
  • 第二个是'对指针的引用' - 所以你实际上可以修改'e'并查看你传入的变量的效果。
猜你喜欢
  • 2013-10-10
  • 2020-02-10
  • 2016-07-28
  • 2021-12-16
  • 1970-01-01
  • 2017-05-26
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多