2020年10月08日

令和元年度 技術士第一次試験問題(再) 情報工学部門 V−8

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 が出力されそうな予想ができる。

タグ:C++
posted by ファーストマクロ at 20:02| Comment(0) | R01技術士一次試験[再](情報工学)
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: