【问题标题】:Simple class won't work in C++简单的类在 C++ 中不起作用
【发布时间】:2014-08-24 05:48:09
【问题描述】:

我对 C++ 中的类有疑问。我刚刚在书的帮助下写了我的第一堂课,练习如下:

写一本带有姓名、作者和出版商的课本。用硬编码的给定文本创建一个对象。让本书通过使用 ToString() 函数来展示。不要将构造函数留空并使用 this-> 指针。

我的编译器中有 0 个错误,但它什么也没显示并立即结束(我的程序),有人可以解释我做错了什么以及为什么编译器没有看到我的错误吗? 我也尝试过在堆上创建一个对象,但也不起作用。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

class Book
{
private:
string name;
string author;
string publisher;

public:
Book(string name, string author, string publisher)
{
    this->name=name;
    this->author=author;
    this->publisher=publisher;
}

~Book(void)
{
}

string getName();
string getAuthor();
string getPublisher();
void setName(string name);
void setAuthor(string author);
void setPublisher(string publisher);
string toString();
};


string Book::getName()
{
return name;
}

string Book::getAuthor()
{
return author;
}

string Book::getPublisher()
{
return publisher;
}

void Book::setName(string name)
{
this->name=name;
}

void Book::setAuthor(string author)
{
this->author=author;
}

void Book::setPublisher(string publisher)
{
this->publisher=publisher;
}

string Book::toString()
{
stringstream ss;
ss << "Name of the book: " << name << endl;
ss << "Author of the book: " << author << endl;
ss << "The book has been published by: " << publisher << endl;
return ss.str();
}


int main()
{
Book b1=Book("The lone child","Bryan Addams", "Publishers INC");
b1.toString();

return 0;
}

【问题讨论】:

  • 在 tubro c++ 中使用 getCh() 查看结果。在 Dev C++ 中使用 System("pause")
  • 将其中任何一个放在 return 0 之前;声明
  • 它没有显示任何东西,因为你没有告诉它。您必须以某种方式输出 Book::toString() 的返回值(参见 operator
  • @Nabin 他可以暂停屏幕20年,如果程序中没有真正产生输出的代码,它仍然不会产生输出。

标签: function class tostring


【解决方案1】:

你从来没有真正打印出b1.toString() 的返回值,所以当然没有输出。捕获toString(); 的返回值然后打印它就可以了。

int main () {
  Book b1 = Book( "The lone child", "Bryan Addams", "Publishers INC");

  string s = b1.toString();

  cout << s << "\n";

  return 0;
}

或者直接打印出来,如:

int main () {
  Book b1 = Book( "The lone child", "Bryan Addams", "Publishers INC");

  cout << b1.toString() << "\n";

  return 0;
}

【讨论】:

  • 非常感谢!我不知道你还必须 cout
  • 您的toString() 方法使用&lt;&lt; 运算符通过使用std::stringstream 类将您的对象序列化为字符串表示形式。这是一种序列化方法,不会产生 IO 输出。很容易犯错,因为&lt;&lt; 看起来就像您习惯使用std::cout 看到的一样。但可以将其视为“将这个喂给那个”运算符。在cout 的情况下,您正在向输出流提供一些东西。在stringstream 的情况下,您正在向产生字符串的流提供一些东西,仅此而已。
  • 感谢您的澄清!
【解决方案2】:

您的程序运行良好。你只是不打印任何东西。你打电话

 b1.toString();

只返回一个字符串。尝试将其替换为

cout << b1.toString();

【讨论】:

  • 感谢您的回答!这比我坚持的要容易!
【解决方案3】:

而不是在字符串toString()函数中返回ss.str, 你应该在那里打印它。

string Book:toString(){
    ...
    cout << ss.str;
    ...
}

【讨论】:

  • 但是 toString() 方法会做一些不同于序列化为字符串的事情,它将被打印,并且可能应该命名为 print()。如果你想打印 toString(),它的返回类型可能不应该是std::string
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多