我需要用户在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