Namaran

Code daily. Without assist.

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を返します。