本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

令和元年度 技術士第一次試験問題(再)【専門科目】

V−8

次の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