この問題を解くためには… |
→ 基本編第3日目参照 |
---|
問題3:アクセス指定子とカプセル化
prob3-1.(難易度:★)
以下のプログラムのクラスCDataに、メンバ変数のセッターおよびゲッターを追加し、ビルドが通るようにし、期待される実行結果を得られるように書き換えなさい。
prob3-1:data.h#ifndef _CDATA_H_ #define _CDATA_H_ #include <iostream> #include <string> using namespace std; class CData{ private: // メンバ変数number int number; // メンバ変数comment string comment; public: // 初期化 void init(); }; #endif // _CDATA_H_
#include "data.h" void CData::init() { number = 0; comment = ""; }
#include <iostream> #include "data.h" using namespace std; int main(){ CData d; d.init(); // パラメータを初期化 d.setNumber(100); d.setComment("Programming C++"); cout << "number = " << d.getNumber() << " comment = " << d.getComment() << endl; return 0; }
number = 100 comment = Programming C++
prob3-2.(難易度:★★)
以下のプログラムは、二つの文字列を合成したり、その長さを求めるする機能を持つクラス、TwoStringsのヘッダファイルと、そのクラスを使ったサンプルプログラムです。このクラスのソースファイルである、twostring.cppを完成させ、実行結果の通りに動くようにしなさい。
prob3-2:twostrings.h#ifndef _TWOSTRINGS_H_ #define _TWOSTRINGS_H_ #include <iostream> #include <string> using namespace std; class TwoStrings{ private: // 一つ目の文字列 string m_string1; // 二つ目の文字列 string m_string2; public: // 一つ目の文字列を設定 void setString1(string s); // 二つ目の文字列を設定 void setString2(string s); // 一つ目の文字列を取得 string getString1(); // 二つ目の文字列を取得 string getString2(); // 二つの文字列をつないだものを取得 string getConnectedString(); // getConnectedString()で得られる文字列の長さを取得 int getConnectedLength(); }; #endif // _TWOSTRINGS_H_
#include <iostream> #include "twostrings.h" using namespace std; int main(){ TwoStrings s; s.setString1("Hello"); s.setString2("World"); cout << "一つ目の文字列は" << s.getString1() << endl; cout << "二つ目の文字列は" << s.getString2() << endl; cout << "二つの文字列を合成したものは" << s.getConnectedString() << endl; cout << "合成した文字列の長さは" << s.getConnectedLength() << "文字" << endl; return 0; }
一つ目の文字列はHello
二つ目の文字列はWorld
二つの文字列を合成したものはHelloWorld
合成した文字列の長さは10文字
二つ目の文字列はWorld
二つの文字列を合成したものはHelloWorld
合成した文字列の長さは10文字
prob3-3.(難易度:★★)
以下のプログラムは、二つの整数の足し算と引き算を行うクラス、Calculationを用いて、二つの数の足し算と引き算の結果を出力したものである。実行結果と、以下に示す仕様をもとに、クラスCalculationを構成するヘッダファイルcalculation.hおよび、ソースファイルcalculation.cppを完成させ、動作するプログラムを完成させなさい。
main.cpp#include <iostream> #include "calculation.h" using namespace std; int main(){ Calculation c; c.setNumber1(8); // 一つ目の数をセット c.setNumber2(9); // 二つ目の数をセット // 二つの数の和を表示 cout << c.getNumber1() << " + " << c.getNumber2() << " = " << c.add() << endl; // 二つの数の差を表示 cout << c.getNumber1() << " - " << c.getNumber2() << " = " << c.sub() << endl; return 0; }
8 + 9 = 16
8 - 9 = -1
クラスCalculationの仕様①メンバ変数(privateで隠ぺいすること)
8 - 9 = -1
メンバ変数 | 型 | 概要 |
---|---|---|
m_number1 | int | 一つ目の数 |
m_number2 | int | 二つ目の数 |
クラスCalculationの仕様②メンバ関数
関数名 | 戻り値の型 | 引数 | 概要 |
---|---|---|---|
setNumber1 | void | int n | m_number1のセッター。引数nを代入する。 |
setNumber2 | void | int n | m_number2のセッター。引数nを代入する。 |
getNumber1 | int | なし | m_number1のゲッター。値を取得する |
getNumber2 | int | なし | m_number2のゲッター。値を取得する |
add | int | なし | m_number1とm_number2の和を返す。 |
sub | int | なし | m_number1とm_number2の差を返す。 |