| この問題を解くためには… |
| → 基本編第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の差を返す。 |









