C++ 在其他标题C和x2B中使用cin+;
我想通过在我自己的头中使用从用户那里获得三个变量 这是我写的一段代码C++ 在其他标题C和x2B中使用cin+;,c++,header,cin,C++,Header,Cin,我想通过在我自己的头中使用从用户那里获得三个变量 这是我写的一段代码 <class T> Sparse<T>::Sparse(){ std::cout << "Please Enter The Following Information" << std::endl << "Row:" ; std::cin >> this->rows; std::cout << "Column:"
<class T>
Sparse<T>::Sparse(){
std::cout << "Please Enter The Following Information" << std::endl << "Row:" ;
std::cin >> this->rows;
std::cout << "Column:" << std::endl;
std::cin >> this->column;
std::cout << "Please Enter The Number of TermS:" << std::endl;
std::cin >> this->term;
}
我遇到的问题是,正如您所看到的,类的函数没有循环,但是
当我运行代码时,编译器会多次运行此块。。。
就像cin不能初始化变量一样
像这样
"Please Enter The Following Information"
"Rows:"
"Columns:"
"Please Enter The Number of TermS:"
"Please Enter The Following Information"
"Rows:"
"Columns:"
"Please Enter The Number of TermS:"
请帮忙
额外细节
正如Coffin先生所说,我想使用“转发声明”,请帮助我。。。
我必须如何使用。。。
因为在另一个标题中包含标题是一种非常糟糕的样式
是的,我有两个构造函数,一个得到
另一个是这样工作的。。。。
这是因为我不想在我的主要部分有cin和cout以及大量的等式(=)。。。
谢谢科芬先生 类的构造函数用于对象的初始创建。在本例中,这是默认构造函数。通常,您可能不希望在类的构造函数中编写面向用户的问题,更不用说默认构造函数了 以您的方式编写意味着,无论何时创建未初始化的稀疏,都会向用户询问以下问题
Sparse<int> a, b;
其次,拥有一个与标准输入/输出对话的构造函数从根本上削弱了它的实用性。使用该逻辑从用户获取值没有问题,但如果将其放入类的构造函数中,则该类只能在具有标准输入/输出的应用程序中使用(gui和无头应用程序都不需要应用)
第三,你将如何处理错误?如果cin在第一个问题后关闭怎么办?您的代码没有检查它,如果它检查了,它将不得不将负担传递给创建对象的人。没有人希望必须写作
try {
Object myObject; // may fail if user types 'wibble' instead of '13'.
} catch (wibble_input_as_columns_exception& e) {
std::cerr << "Damnit, Dave, 'wibble' is not a valid number of columns." << std::endl;
}
试试看{
对象myObject;//如果用户键入“wibble”而不是“13”,则可能会失败。
}捕获(wibble\u输入\u作为\u列\u异常&e){
你能展示一个简短完整的例子吗?我怀疑构造函数下次会被调用。你能给我们展示一下代码吗?cin
不是一个类。它是标准输入流的一个对象。为什么不#include
?如果你想要一个ios东西的转发声明,不要尝试自己做。标准包括
标题正是为了这个目的;使用它。更好的设计是将行
、列
和术语
传递给构造函数。这是一个很好的答案,除了回答类cin
的突出问题,这是一个真正的问题。这是一个相当公平的观点,编辑。他不喜欢要问这个问题,他的问题是“我遇到的问题是,你可以看到,类的函数没有循环,但是……”。所以你是对的,他不需要“类cin”声明,这是错误的,但如果他做得好,他也不需要它。这是真的,在这种情况下op不需要它,但它仍然站在“就像cin不能初始化变量…”重复对它说话,就像op认为他们想要的,但“cin”不工作,这很容易回答;“不,#include
。仅此而已:)是的,我几乎就是这么写的-编辑没有立即为我显示出来,也许是因为有一些问题。
Sparse<int> a, b;
if (day == "Monday") {
a.something();
} else {
b = a;
}
std::vector<Sparse<int>> manySparses;
manySparses.resize(1000);
Sparse<int> a, b;
a.GetConstraints();
if (day == "Monday")
b.GetConstraints();
else
b = a;
#include <iostream>
class string {
public:
string() {
std::cout << "Enter the string you want: ";
std::cin >> m_string;
m_length = strlen(m_string);
}
...
};
class string {
public:
string() : m_string(NULL), m_length(0) {}
...
};
try {
Object myObject; // may fail if user types 'wibble' instead of '13'.
} catch (wibble_input_as_columns_exception& e) {
std::cerr << "Damnit, Dave, 'wibble' is not a valid number of columns." << std::endl;
}