我需要用戶在main()中輸入兩個bool值,然後將其作爲在單獨文件中找到的類函數中的參數輸入。但是,如果沒有輸入bool值,我還希望用戶調用該類中的默認構造函數。我怎樣才能做到這一點?調用默認構造函數
調用默認構造函數
回答
實現一個具有默認參數的構造函數。例如
TestClass(bool bVal1 = false, bool bVal2 = false);
,你改變,因爲需要實現你想要的默認行爲,然後,如果你創建一個這樣
TestClass test_instance; // constructor uses default args
TestClass test_instance2(true,false); // constructor uses specified args
的情況下,則構造函數將治療參數設置爲默認值設定
構造函數聲明(如果沒有提供)。
可選地具有2個構造
TestClass();
TestClass(bool bVal1, bool bVal2);
並讓類無論使用哪一個適當的用戶。
儘管如此,在調用代碼中使用默認值100%更簡單,更清潔,並在用戶不輸入數據時將其提供給構造函數... – MFH 2012-07-08 23:11:38
@MFH您可能是對的。問題不是100%清楚。爲什麼不把你提出的方法寫成答案,以便OP有更多的選擇。 – mathematician1975 2012-07-08 23:20:33
你應該真的失去'TestClass test_instance();'的括號,以免你聲明一個函數。 – chris 2012-07-08 23:25:54
考慮以下情況:
struct Test {
bool val1, val2;
Test(bool val1, bool val2) : val1(val1), val2(val2) { }
};
最乾淨的解決方案看起來有點像這樣:
int main() {
bool val1 = true, val2 = true;//init with defaults
if(userWantsToChangeDefaults) std::cin >> val1 >> val2;//obviously this is more or less pseudocode
Test test(val1, val2);
}
只是爲了證實my hint 'use a parser',這裏是一個非常非常簡單(讀:缺乏所有輸入驗證)方法,基於Boost Spirit。
你可以用簡單的IO流寫這個,你會基本得到@MFH發佈的內容。根據具體情況,更簡單的方法可能更適合。
#include <boost/fusion/adapted.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_istream_iterator.hpp>
struct MyClass
{
bool _a, _b;
MyClass(bool a, bool b) :_a(a), _b(b) { }
MyClass(){}
};
BOOST_FUSION_ADAPT_STRUCT(MyClass,(bool,_a)(bool,_b));
namespace qi = boost::spirit::qi;
int main()
{
std::cin.unsetf(std::ios::skipws);
boost::spirit::istream_iterator f(std::cin), l;
MyClass data;
using namespace qi;
auto optbool = bool_ | attr(false);
if (phrase_parse(f,l,
(optbool >> optbool),
qi::blank, data))
{
std::cout << "data._a: " << std::boolalpha << data._a << "\n"
<< "data._b: " << std::boolalpha << data._b << "\n";
} else
std::cerr << "Illegal input\n";
}
- 1. 從參數化構造函數調用默認構造函數
- 2. 從另一個構造函數調用默認構造函數
- 3. C++構造函數調用默認構造函數
- 4. 默認構造函數調用
- 5. 調用默認構造函數
- 6. 調用默認構造函數
- 7. 默認構造函數不調用
- 8. 父構造函數默認調用?
- 9. 程序調用默認構造函數?
- 10. 調用默認構造函數
- 11. 默認構造函數從未調用
- 12. 默認構造函數未調用
- 13. 類默認構造函數
- 14. 默認構造函數
- 15. 非默認構造函數
- 16. C++,默認構造函數
- 17. constexpr默認構造函數
- 18. 非默認構造函數
- 19. 複製構造函數調用默認構造函數以創建對象
- 20. 通過子類構造函數隱式調用默認構造函數
- 21. 沒有適當的默認構造函數可用 - 默認構造函數調用的地方在哪裏?
- 22. C++一個類的默認構造函數調用另一個類的另一個默認構造函數
- 23. 使用默認的構造函數
- 24. 默認的默認構造函數,爲什麼不是用戶提供的默認構造函數?
- 25. 是構造函數生成的默認構造函數嗎?
- 26. 構造函數替換默認構造函數?
- 27. 繼承構造函數和默認構造函數
- 28. 默認構造函數與正常構造函數的類C++
- 29. 構造函數和默認構造函數的區別
- 30. 調用非默認的結構構造函數內的構造方法
你有任何代碼可以顯示嗎?你卡在哪裏? – sehe 2012-07-08 23:01:35
你到目前爲止取得了哪些進展? – reuben 2012-07-08 23:01:45
作業?沒關係,但我們應該知道。 – DavidO 2012-07-08 23:02:53