2026-09-16
ratio_add.cpp
#include <iostream>
class Ratio {
public:
Ratio(int n) : num(n), den(1) {}
Ratio(int n, int d) : num(n), den(d) {}
int num, den;
};
Ratio add(Ratio a, Ratio b) {
return Ratio(a.num * b.den + b.num * a.den, a.den * b.den);
}
int main() {
Ratio r = add(3, Ratio(1, 2));
std::cout << r.num << '/' << r.den << '\n';
}
add(3, Ratio(1, 2))という呼び出しに注目してください。これはコンパイルできます。何を出力するでしょうか?
Answer
7/2(その後に改行)。Ratio(int n)はexplicitが付いていない1引数コンストラクタなので、intからRatioへの暗黙の変換に使われます。addの第1引数3は、仮引数がRatio型であることを受けて暗黙にRatio(3)(分子3、分母1)へ変換されます。したがってaddの中身は3*2 + 1*1 = 7を分子、1*2 = 2を分母として計算し、7/2を返します。