C++クラスとオブジェクト完全ガイド:オブジェクト指向プログラミングの実践
C++ クラスとオブジェクト
C++でクラスとオブジェクトを使ってデータと振る舞いをカプセル化する方法を、明確な実例とベストプラクティスで解説します。
なぜクラスを使うのか?
これまでのレッスンで関数と変数を学びました。プロジェクトが大きくなると、関連するデータと操作をグループ化することが、保守性と明確性のために不可欠になります。クラスを使えば、データメンバとメンバ関数を単一の論理ユニットにバンドルでき、オブジェクト指向プログラミング(OOP)——現代的C++設計の基盤——を可能にします。
例示: 部屋
長方形の部屋を考えます。length、breadth、height を格納し、面積と体積を計算する必要があります。クラスを使えばこれらを密に結合できます:
class Room {
public:
double length;
double breadth;
double height;
double calculateArea() {
return length * breadth;
}
double calculateVolume() {
return length * breadth * height;
}
};
クラスの定義
クラスは class キーワード、クラス名、波括弧で囲まれた本体、末尾のセミコロンで定義します:
class ClassName {
// データメンバ
// メンバ関数
};
上記例では Room が設計図です。内部の変数を データメンバ、関数を メンバ関数 と呼びます。
オブジェクトの作成
クラスを定義するだけではメモリは確保されません。オブジェクトはその設計図から作られる具象インスタンスです:
Room room1; // 単一オブジェクト
Room room2, room3; // 1宣言で複数オブジェクト
オブジェクトは関数内、他のクラス内、グローバルなど、スコープが尊重されればどこでもインスタンス化できます。
メンバへのアクセス
ドット(.)演算子でメンバ関数を呼び出したりデータメンバにアクセスしたりします:
room1.length = 5.5;
double area = room1.calculateArea();
実例 1: 部屋の指標計算
#include <iostream>
using namespace std;
class Room {
public:
double length;
double breadth;
double height;
double calculateArea() {
return length * breadth;
}
double calculateVolume() {
return length * breadth * height;
}
};
int main() {
Room room1;
room1.length = 42.5;
room1.breadth = 30.8;
room1.height = 19.2;
cout << "Area of Room = " << room1.calculateArea() << endl;
cout << "Volume of Room = " << room1.calculateVolume() << endl;
return 0;
}
出力
Area of Room = 1309 Volume of Room = 25132.8
カプセル化: public と private
カプセル化はアクセスを制御することでデータを保護します。private 宣言されたメンバは外部から隠蔽され、publicメンバ関数を通じてのみアクセス可能になります。
class Test {
private:
int a;
void function1() {}
public:
int b;
void function2() {}
};
次の例ではデータメンバを private にし、public メソッドで初期化しています:
#include <iostream>
using namespace std;
class Room {
private:
double length;
double breadth;
double height;
public:
void initData(double len, double brth, double hgt) {
length = len;
breadth = brth;
height = hgt;
}
double calculateArea() {
return length * breadth;
}
double calculateVolume() {
return length * breadth * height;
}
};
int main() {
Room room1;
room1.initData(42.5, 30.8, 19.2);
cout << "Area of Room = " << room1.calculateArea() << endl;
cout << "Volume of Room = " << room1.calculateVolume() << endl;
return 0;
}
出力
Area of Room = 1309 Volume of Room = 25132.8
さらに学ぶために
権威あるガイドラインについては、ISO/IEC 14882:2023 C++ 標準や、cplusplus.com、cppreference.com などの信頼できるリソースを参照してください。
C言語
- C++構造体とクラス:組み込み開発者のための実践ガイド
- C# クラスとオブジェクト:堅牢な OOP の基礎
- C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
- C# 部分クラスと部分メソッドを理解する
- C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
- C++フレンド関数とフレンドクラス:アクセス制御のマスター
- C++クラステンプレート完全ガイド:実践的なジェネリックプログラミング
- C++ structとclassの違い:構文、特徴、使い分けのベストプラクティス
- C++ストレージクラス完全解説:スコープ、ライフタイム、使い方
- C++日付と時刻の完全ガイド:ctimeライブラリの活用
- Javaクラスとオブジェクト:実践ガイド