背景:我正在阅读一本精彩的书,他们简要地提到了转换构造函数。
虽然我理解转换构造函数的基本原理,但我有点迷失,在实践问题部分他们问:
编写转换约束器,将ratnum
转换为realnum
,从我在问题发生之前收到的代码中转换为class ratnum {
int num, denom;
public:
ratnum(int numenator = 2, int denominator = 3) : num(numenator), denom(denominator) {}
void show() { cout << static_cast<double>(num) / denom << endl; }
double result() { return num / denom; }
};
class realnum {
int number;
public:
realnum(double numr = 0) : number (numr) {}
};
:
ratnum one = 10; //or
ratnum two = {10, 2}
我总是这样处理转换构造函数:
result
但从未见过我们可以从类转换为类类型。 请问,请问这样的转换构造函数应该如何工作(可能还有示例)?
定义ratnum
类的函数realnum check = one.result();
并编写:
{{1}}
是什么意思?
答案 0 :(得分:2)
但从未见过我们可以从类转换为类类型。可以 请你说,这样的转换构造函数应该如何工作(也许吧 用例子?
与从非类型转换完全相同。根本没有任何区别。
答案 1 :(得分:1)
我认为他们的意思是构造函数的重载需要另一个类的输入,例如
realnum(ratnum const& other) : number{other.result()} {}
反之亦然,从ratnum
构建realnum
,虽然这可能不那么微不足道,因为有无理数,无限重复数等等。
您可以使用此版本的构造函数来执行类似
的操作ratnum a{2, 4};
realnum b{a}; // This used your "conversion" constructor