【问题标题】:Constructor with ostream and istream parameters [closed]具有 ostream 和 istream 参数的构造函数
【发布时间】:2020-12-24 21:25:25
【问题描述】:

我有一个问题是实现具有istreamostream 参数的类构造函数。这些值将在类的范围内使用。我正在构建一个会提问的游戏,我想使用 istream 参数来收集用户输入,并使用 ostream 在控制台中显示内容。

class MyClass{

public:
    MyClass();
    MyClass(ostream& show, istream& userInput);
    ~MyClass();

    void anotherFunction(string name, string lastName);
    void executeProgram();

谁能解释一个解决方案并提供示例代码,以使类中istream 的范围可访问?在主类中我该如何称呼它?

编辑: 嗨,谢谢你的尝试,即使我没有明确的输出。

我真正想要的是使用这个构造函数作为我程序的用户界面。这是一个基于文本的游戏,将接受 3 个字符作为选项。我想使用这个构造函数来收集输入。我希望这是有道理的。

【问题讨论】:

  • 到目前为止你做了什么?您遇到了什么问题?
  • 你所描述的没有多大意义。当您#include <iostream> 时,默认情况下您拥有全局可用的所有函数/运算符。例如,在创建 friend 函数以重载 <<>> 时,通常只传递 istreamostream 引用作为参数。你希望完成什么?
  • 它们是流无关紧要。您只需要重新阅读有关引用使用的教程。

标签: c++ ostream istream


【解决方案1】:

我在这里没有看到任何特殊问题(您的问题也没有提到任何问题)。例如

#include <iostream>
#include <fstream>
using namespace std;

class MyClass
{
public:
    MyClass() : _in(cin), _out(cout) {}
    MyClass(istream& in, ostream& out) : _in(in), _out(out) {}
private:
    istream& _in;
    ostream& _out;
};

int main()
{
    ifstream in("in.txt");
    ofstream out("out.txt");
    MyClass mc(in, out);
    ...
}

【讨论】:

  • 我希望你想要这个类的值语义?
  • 我不知道 OP 想要什么,因为他们并没有真正说出来。这是我最好的猜测。
【解决方案2】:

惯用的 C++ 方式是不在构造函数中采用两个流参数,而是为您的类定义插入和提取运算符。

是这样的:

class MyClass
{
public:
      /* define various accessors here */
};

ostream& operator<<(ostream& os, const MyClass& instance) { /* write out your class's representation here. */ }

istream& operator>>(istream& is, MyClass& instance) { /* set state in instance reading it from is. */ }

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2011-02-08
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多