【问题标题】:In my classes, what should I change the cout/cin things with?在我的课堂上,我应该用什么来改变 cout/cin 的东西?
【发布时间】:2017-05-11 22:52:10
【问题描述】:

所以基本上我只是在我的一个类方法(函数)中使用 cout/cin 用简单的代码编写了我的程序。我知道这很糟糕,不应该这样做,我应该用什么切换它们?

例如,现在我有 Human 类。它有一些字段(变量),例如性别、身高、年龄。

我有一个叫getInfo()的方法,基本上很多

cout << "Whats your age?" << endl;
cin >> age;

等等。我应该把它们改成什么?我应该使用类似的东西

ostream& operator<<(ostream &o, const Human &s) 
istream& operator>>(istream &i, Human &s)

我已经把这些函数写下来了,但它们基本上只适用于 toString 吗?

我应该使用 toString 做什么? (需要 toString - 我的项目的任务)。

【问题讨论】:

  • 重载的操作符会像 getInfo() 和 toString 方法一样?为什么你不能只询问方法和 cin/cout 的信息?
  • 嗯,toString() 方法一般用于格式化和显示字符串中的输出。您可以在其中使用重载运算符“>”。
  • 答案取决于您真正需要(或被要求)做什么......我会首先“解耦”包含数据的类(人类)以及您从中获取数据的方式用户并将其分配给 Human 对象。 toString() 方法可能只是将人类信息(年龄,姓名,...)格式化为一个 std::string,可以输出到 Human 类之外的某个地方(请注意,在我看来,这真的是丑陋的 C++,它更好提供运营商
  • 我个人会要求在 main 函数中输入信息并使用 setName 等将其分配给对象,但是我有另一个名为 MealPlanner 的类,其中一个任务是与另一个类一起使用组合。所以我在 Meal Planner 中创建了 Human 对象,但在 main 中实际上无法获取任何信息。

标签: c++ class oop tostring


【解决方案1】:

您可以在输入和输出流上使getInfo 通用,例如:

void Human::getInfo(std::istream& input, std::ostream& output) {
    output << "What's your age?" << std::endl;
    input >> age;
    // etc.
}

toStrings 通常返回对象的字符串表示形式,因此它可能看起来像这样:

std::string Human::toString() const {
    std::string string;
    string += "Human(\n";
    string += "    age: " + std::to_string(age) + "\n";
    // etc.
    string += ")";
    return string;
}

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多