データ隠蔽とカプセル化で学生情報を管理するC++プログラム
C++では、データ隠蔽(データハイディング)とカプセル化の仕組みを活用することで、外部から直接アクセスできない安全なデータ型を設計できます。ここでは、学生情報を管理するクラスを例に、その実装方法を解説します。
学生クラスには、first_name(名)、last_name(姓)、age(年齢)、class(クラス)の4つの項目を持たせますが、これらのメンバー変数は private として宣言し、外部から直接操作できないようにします。その代わりに、get_firstname() / set_firstname()、get_age() / set_age() といったゲッター・セッター関数を定義して値の取得と更新を行い、さらに to_string() 関数で(age, first_name, last_name, class)の形式の文字列を生成して、学生の詳細を表示できるようにします。
プログラムでは、コンソールから4つのパラメータを入力として受け取り、定義したセッターメソッドで値を設定します。その後、ゲッターメソッドで各項目を順に表示し、最後に to_string() メソッドで整形された学生情報を出力します。
たとえば、入力が以下のようであれば、
priyam kundu 16 10
出力は次のようになります。
16 priyam kundu 10 (16, priyam, kundu, 10)
解決のための手順
この問題は、次の手順で解決できます。
- string 型の first_name・last_name と、整数型の age・cl をメンバーに持つクラスを定義する
- すべての属性に対応するゲッター関数を定義する
- すべての属性に対応するセッター関数を定義する
- stringstream オブジェクトを利用した to_string() 関数を定義し、出力形式に一致した整形済み文字列を生成する
- main 関数では以下の処理を行う
- 入力を1行ずつ読み込み、first_name・last_name・age・cl にそれぞれ格納する
- セッター関数を呼び出して、読み込んだ値をクラスのメンバーに設定する
- ゲッターメソッドを使ってすべての属性を表示する
- to_string() 関数を使って、学生情報を(age, first_name, last_name, cl)の形式で表示する
実装例
理解を深めるために、以下の実装例を確認してみましょう。
#include <iostream>
#include <sstream>
using namespace std;
class Student{
private:
int age, cl;
string first_name, last_name;
public:
int get_age(){return age;}
int get_class(){return cl;}
string get_firstname(){return first_name;}
string get_lastname(){return last_name;}
void set_age(int a){age = a;}
void set_class(int c){cl = c;}
void set_firstname(string fn){first_name = fn;}
void set_lastname(string ln){last_name = ln;}
string to_string(){
stringstream ss;
ss << "(" << age << ", " << first_name << ", " << last_name << ", " << cl << ")";
return ss.str();
}
};
int main() {
Student stud;
int age, cl;
string first_name, last_name;
cin >> first_name >> last_name >> age >> cl;
stud.set_age(age);
stud.set_class(cl);
stud.set_firstname(first_name);
stud.set_lastname(last_name);
cout << stud.get_age() << endl;
cout << stud.get_firstname() << endl;
cout << stud.get_lastname() << endl;
cout << stud.get_class() << endl;
cout << endl << stud.to_string();
}
入力
priyam kundu 16 10
出力
16 priyam kundu 10 (16, priyam, kundu, 10)
コードのポイント
このプログラムの重要なポイントは以下のとおりです。
- データ隠蔽: メンバー変数を private にすることで、クラス外部からの直接アクセスを防ぎ、不正な値の代入を防止できます。
- カプセル化: データとそれを操作する関数をひとつのクラスにまとめることで、コードの保守性と再利用性が向上します。
- stringstream の活用: to_string() 関数では stringstream を使うことで、数値と文字列を簡単に連結し、整形された文字列を生成できます。
-
C++プログラムから外部アプリケーション(メモ帳など)を起動する方法
この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<
-
C++で再帰を使って最大公約数(GCD)を求めるプログラム
2つの数の最大公約数(GCD:Greatest Common Divisor)とは、その両方の数を割り切ることができる最大の整数のことです。例として、63と42という2つの数を考えてみましょう。63 = 7 × 3 × 3 42 = 7 × 3 × 2 したがって、63と42のGCDは 21このように、共通する約数は「7」と「3」であり、その積である21が最大公約数となります。ここでは、再帰(リカージョン)を使って2つの数のGCDを求めるC++プログラムを2つの方法で紹介します。方法1:減算による再帰1つ目の方法は、大きい方の数から小さい方の数を引く操作を再帰的に繰り返すアプローチです。これは