次のC++プログラムの実行結果として、最も適切なものはどれか。
#include <iostream>
using namespace std;
class Sample {
public:
int val;
Sample (int i) { val = i; }
void operator= (int i) { val += i; }
void operator= (Sample s) { val += 1; }
} ;
Sample add (Sample x) {
x = 1;
return x;
}
int main ()
{
Sample s = 1;
cout << add (s).val;
}
@ 1 A 2 B 3 C 4 D 5
A
operatorは、演算子のオーバーロードに使用し、
返すオブジェクト operator 演算子 (引数)
という形式で表現する。
Sample s = 1; の Sample s によってまず、valが0で初期化される。
そして、s = 1 の = 演算子によって void operator= (int i) { val += i; } が引数1で実行され、valが1になる。
add (s).val; の add(s)によって、add()関数が呼び出され、
x = 1によって、void operator= (int i) { val += i; } が引数1で実行され、val が 2になる。
結果、add (s).valを出力すると 2 が出力される。
なお、main() では、S = 1 で初期化し、add() 関数内で x = 1 として 1を足しこんでいる感じがするので、直観的に 2 が出力されそうな予想ができる。
V−7 | 目次 | V−9 |