C++ クラスとオブジェクトの例

⚡ スマートサマリー

クラスとオブジェクト C++ これらはオブジェクト指向プログラミングの基礎を形成するものであり、クラスはデータとメンバ関数の設計図を定義し、オブジェクトはその設計図から作成される具体的なインスタンスである。

  • 🔷 授業計画: A C++ このクラスは、データメンバーとメンバー関数を1つのユーザー定義型にまとめます。
  • 🔑 アクセス修飾子: private、public、protectedというキーワードは、クラスメンバーへのアクセス場所を制御します。
  • 🧱 オブジェクトのインスタンス化: クラスからオブジェクトを作成するには、クラス名-オブジェクト名の構文を使用します。
  • 👉 会員アクセス: ドット演算子はパブリックメンバにアクセスし、メンバ関数は格納されたデータを操作します。
  • ⚙️ コンストラクター: コンストラクタはオブジェクトを自動的に初期化し、デストラクタはスコープ外になったときにオブジェクトを解放します。
  • 🤖 AI支援: GitHub Copilotや同様のAIアシスタントは、短いコメントからクラス定義やコンストラクタを自動生成します。

C++ クラスとオブジェクト

クラスとは何ですか?

A C++ クラスは、データと、そのデータを操作するためのメソッドを 1 つにまとめます。クラスはオブジェクトの形式も決定します。クラスに含まれるデータとメソッドは、クラス メンバーと呼ばれます。クラスは、ユーザー定義のデータ型です。クラス メンバーにアクセスするには、クラスのインスタンスを使用します。クラスは、オブジェクトの設計図と考えることができます。

クラスは家のプロトタイプとして機能します。ドア、窓、床などの位置とサイズを示します。これらの記述に基づいて家を構築できます。家がオブジェクトになります。プロトタイプから複数の家を作成することが可能です。同様に、クラスから複数のオブジェクトを作成することも可能になります。

C++ オブジェクトの設計図としてのクラス

上の図には、一軒家のプロトタイプがあります。 このプロトタイプから、特徴の異なるXNUMXつの住宅を作成しました。

クラスを設計図として捉えるという考え方を踏まえ、次のステップは、コード内でクラスがどのように宣言されるかを見ていくことです。

クラス宣言

In C++クラスは、`class` キーワードを使用して定義します。この後にクラス名が続きます。クラス本体は、中括弧 { } で囲んで記述します。

構文

class class-name
   {
   // data
   // functions
   };
  • その クラス名 これはクラスに割り当てる名前です。
  • その データ これはクラスのデータであり、通常は変数として宣言されます。
  • その 機能 これらはクラス関数です。

クラス名とクラス本体を宣言すると、当然ながら、各メンバーを誰が使用できるのかという疑問が生じます。

プライベートキーワードとパブリックキーワード

このXNUMXつのキーワードに出会ったことがあるはずです。 これらはアクセス修飾子です。

プライベート:

private キーワードを使用して関数またはクラスを定義すると、プライベートになります。 これらにはクラス内からのみアクセスできます。

公衆:

一方、public キーワードはデータ/関数を公開します。 これらはクラスの外からアクセスできます。

クラスが作成されると、データ型から変数を作成するのと同様に、そのクラスからオブジェクトを作成できます。

オブジェクト定義

オブジェクトはクラスから作成されます。クラスオブジェクトの宣言方法は、変数の宣言方法と似ています。クラス名を最初に記述し、その後にオブジェクト名を記述します。オブジェクトはクラス型になります。

構文

class-name object-name;
  • その クラス名 これは、オブジェクトが作成されるクラスの名前です。
  • その オブジェクト名 これは、新しいオブジェクトに割り当てる名前です。

クラスからオブジェクトを作成するこのプロセスは、インスタンス化として知られています。

オブジェクトが作成されると、そのパブリックメンバーには簡単な演算子を通して直接アクセスできます。

データメンバーへのアクセス

クラスのパブリック メンバーにアクセスするには、(.) ドット演算子を使用します。これらは、パブリック アクセス修飾子でマークされたメンバーです。

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

出力:

C++ 公開データメンバーへのアクセス例1の出力

コードのスクリーンショットは次のとおりです。

C++ 公開データメンバーへのアクセス例1コード

Code 説明:

  1. iostream ヘッダー ファイルの機能を使用するには、コードに iostream ヘッダー ファイルを含めます。
  2. std 名前空間をコードに含めて、呼び出さずにそのクラスを使用します。
  3. Phone という名前のクラスを宣言します。
  4. public アクセス修飾子を使用して、これから作成する変数をパブリックにアクセスできるものとしてマークします。
  5. double データ型の可変コストを宣言します。
  6. スロットという名前の整変数を宣言します。
  7. クラス本体の終了。
  8. main()関数を呼び出します。 プログラム ロジックは本体内に追加する必要があります。
  9. Y6 という名前の Phone タイプのオブジェクトを作成します。 これをインスタンス化と呼びます。
  10. Y7 という名前の Phone タイプのオブジェクトを作成します。 これをインスタンス化と呼びます。
  11. オブジェクト Y6 を使用して、クラス Phone の変数/メンバー コストにアクセスします。 値は 100.0 に設定されます。 Y6 のコストは 100.0 に設定されます。
  12. オブジェクト Y6 を使用して、クラス Phone の変数/メンバー スロットにアクセスします。 値は 2 に設定されます。Y6 のスロットは 2 に設定されます。
  13. オブジェクト Y7 を使用して、クラス Phone の変数/メンバー コストにアクセスします。 値は 200.0 に設定されます。 Y7 のコストは 200.0 に設定されます。
  14. オブジェクト Y7 を使用して、クラス Phone の変数/メンバー スロットにアクセスします。 値は 2 に設定されます。Y7 のスロットは 2 に設定されます。
  15. Y6 のコストを他のテキストと一緒にコンソールに出力します。
  16. Y7 のコストを他のテキストと一緒にコンソールに出力します。
  17. Y6 のスロット数を他のテキストと一緒に出力します。
  18. Y7 のスロット数を他のテキストと一緒に出力します。
  19. プログラムは正常に完了すると値を返す必要があります。
  20. main() 関数の本体の終わり。

パブリックメンバーは外部コードを受け入れることができるが、プライベートメンバーははるかに厳格なアクセス規則に従う必要がある。

プライベートクラスとは何ですか?

プライベートとしてマークされたクラス メンバーには、クラス内で定義された関数によってのみアクセスできます。 クラスの外で定義されたオブジェクトまたは関数は、そのようなメンバーに直接アクセスできません。 プライベート クラス メンバーには、member 関数と friends 関数によってのみアクセスできます。

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

出力:

C++ プライベートクラスメンバー 例2の出力

コードのスクリーンショットは次のとおりです。

C++ プライベートクラスメンバーの例2のコード

Code 説明:

  1. その関数を使用するには、コードに iostream ヘッダー ファイルを含めます。
  2. std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
  3. ClassA という名前のクラスを作成します。
  4. public アクセス修飾子を使用して、作成するクラス メンバーをパブリックにアクセスできるものとしてマークします。
  5. XNUMX つの整数値 val を受け取る set_a() という名前の関数を作成します。
  6. get_a() という名前の関数を作成します。
  7. private アクセス修飾子を使用して、作成するクラス メンバーをプライベートにアクセスできるものとしてマークします。
  8. a という名前の整数変数を宣言します。
  9. クラス本体の終了。
  10. クラス名とスコープ解決演算子を使用して関数 get_a() にアクセスします。関数が呼び出されたときに何を行うかを定義します。
  11. 関数 get_a() は、呼び出されると変数 a の値を返す必要があります。
  12. 関数 get_a() の定義は終了です。
  13. クラス名とスコープ解決演算子を使用して関数 set_a() にアクセスします。関数が呼び出されたときに何を行うかを定義します。
  14. 変数 val の値を変数 a に代入します。
  15. 関数 set_a() の定義の終わり。
  16. main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
  17. ClassA のインスタンスを作成し、名前を a にします。
  18. 上記のクラス インスタンスと関数 set_a() を使用して、値 20 を変数 a に割り当てます。
  19. コンソール上に変数 a の値と一緒にテキストを出力します。 変数 a の値は、get_a() 関数を呼び出すことによって取得されます。
  20. プログラムは正常に完了すると値を返す必要があります。
  21. 関数 main() の本体の終わり。

保護対象メンバーは、プライベートとパブリックの中間に位置し、継承のための重要な機能を1つ追加する。

保護クラスとは何ですか?

protected としてマークされたクラス メンバーは、private としてマークされたクラス メンバーよりも有利です。 これらは、その定義のクラス内の関数によってアクセスできます。 さらに、派生クラスからもアクセスできます。

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

出力:

C++ protectedクラスメンバーの例3の出力

コードのスクリーンショットは次のとおりです。

C++ protectedクラスの継承例3のコード

Code 説明:

  1. その関数を使用するには、コードに iostream ヘッダー ファイルを含めます。
  2. std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
  3. ParentClass という名前のクラスを作成します。
  4. protected アクセス修飾子を使用して、作成するクラス メンバーを保護としてマークします。
  5. value という名前の整数変数を作成します。
  6. クラス本体の終了。
  7. ParentClass を継承する ChildClass という名前の新しいクラスを作成します。
  8. protected アクセス修飾子を使用して、作成するクラス メンバーを子クラスにアクセスできるものとしてマークします。
  9. XNUMX つの整数値 x を取る setId() という名前の関数を作成します。
  10. 変数 x の値を変数値に代入します。
  11. 関数 setId() の定義の終わり。
  12. displayValue() という名前の関数を作成します。
  13. value という名前の変数の値を他のテキストと一緒にコンソールに出力します。
  14. 関数displayValue()の本体の終わり。
  15. ChildClass という名前のクラス本体の終わり。
  16. main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
  17. c. ChildClass のインスタンスを作成し、名前を付けます。
  18. 上記のクラス インスタンスと関数 setId() を使用して、値 21 を変数 x に割り当てます。
  19. 上記のクラス インスタンスを使用して、displayValue() という名前の関数を呼び出します。
  20. プログラムは正常に完了すると値を返す必要があります。
  21. 関数 main() の本体の終わり。

クラスはデータを格納するだけでなく、そのデータに対して操作を行う関数をグループ化する役割も担います。

クラスメンバー関数

関数はデータを操作するのに役立ちます。 クラス メンバー関数は、次の XNUMX つの方法で定義できます。

  • クラス定義内
  • クラス定義の外側

関数をクラス定義の外部で定義する場合は、スコープ解決演算子 (::) を使用する必要があります。これには、クラス名と関数名を付ける必要もあります。

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

出力:

C++ クラスメンバ関数 例4の出力

コードのスクリーンショットは次のとおりです。

C++ クラスメンバ関数の例4のコード

Code 説明:

  1. その機能を使用するには、プログラムに iostream ヘッダー ファイルをインクルードします。
  2. その関数を使用するには、プログラムに文字列ヘッダー ファイルを含めます。
  3. std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
  4. という名前のクラスを作成します Guru99.
  5. これから作成するクラスメンバーを一般公開するには、public アクセス修飾子を使用します。
  6. tutorial_name という名前の文字列変数を作成します。
  7. id という名前の整数変数を作成します。
  8. printname() という名前の関数を作成します。 この関数はクラス定義内では定義されていません。
  9. printid() という名前の関数を作成してください。この関数はクラス定義内に定義されています。関数の本体もクラス定義内に追加されています。
  10. 変数 id の値を他のテキストと一緒にコンソールに出力します。 これは printid() 関数の本体内に追加されていることに注意してください。 これは、printid() 関数が呼び出されたときにのみ実行されます。
  11. 関数 printid() の本体の終わり。
  12. クラス本文の終わり Guru99.
  13. 関数 printname() の定義の開始。
  14. 変数tutorial_nameの値を他のテキストと一緒にコンソールに出力します。 これは printname() 関数の本体内に追加されていることに注意してください。 これは、printname() 関数が呼び出されたときにのみ実行されます。
  15. printname() 関数の定義の終わり。
  16. main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
  17. クラスのインスタンスを作成します Guru99にして、guru99という名前を付けました。
  18. 上記の例を使用して、値を割り当てます C++ 変数tutorial_nameに追加します。
  19. guru99 インスタンスを使用して、値 1001 を変数 id に割り当てます。
  20. インスタンス guru99 を使用して関数 printname() を呼び出します。
  21. end (終了行) コマンドを呼び出して、コンソールに新しい空白行を出力します。
  22. インスタンス guru99 を使用して関数 printid() を呼び出します。
  23. プログラムは正常に完了すると値を返す必要があります。
  24. main() 関数の本体の終わり。

オブジェクトが作成されたときと破棄されたときに、2つの特別なメンバ関数が自動的に実行されます。

コンストラクターとデストラクター

コンストラクタとは

コンストラクタはオブジェクトを初期化する特別な関数です。 C++ コンパイラ オブジェクトを作成する際にコンストラクタを呼び出します。コンストラクタは、クラスメンバーに値を割り当てるのに役立ちます。もちろん、これはメモリ領域が割り当てられた後に行われます。

デストラクタとは何ですか?

一方、デストラクターはクラス オブジェクトを破棄するのに役立ちます。

コンストラクター名はクラス名と似ている必要があります。 コンストラクターには戻り値の型がありません。

コンストラクターはクラス本体の内側でも外側でも定義できます。クラス本体の外側で定義する場合は、クラス名とスコープ解決演算子 (::) を使用して定義する必要があります。

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

出力:

C++ コンストラクタとデストラクタの例5の出力

コードのスクリーンショットは次のとおりです。

C++ コンストラクタとデストラクタの例5のコード

Code 説明:

  1. その関数を使用するには、iostream ヘッダー ファイルをコードに組み込みます。
  2. std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
  3. ClassA という名前のクラスを作成します。
  4. public アクセス修飾子を使用して、作成しようとしているメンバーをパブリックにアクセスできるものとしてマークします。
  5. クラスのコンストラクターを作成します。
  6. コンストラクタが呼び出されたときにコンソールに表示するテキスト。endlは C++ 行の終了を意味するキーワード。マウス カーソルを次の行に移動します。
  7. クラス コンストラクターの本体の終わり。
  8. クラスのデストラクターを作成します。
  9. デストラクタが呼び出されたときにコンソールに表示するテキスト。endlは C++ 行の終了を意味するキーワード。マウス カーソルを次の行に移動します。
  10. デストラクターの本体の終わり。
  11. クラス本体の終了。
  12. main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
  13. クラス オブジェクトを作成し、名前を a にします。 コンストラクターが呼び出されます。
  14. p という名前の整数変数を作成し、値 1 を割り当てます。
  15. 変数 p を使用して if ステートメント ブロックを作成します。
  16. a. クラス オブジェクトを作成し、名前を付けます。 デストラクタが呼び出されます。
  17. if ステートメントの本文の終わり。
  18. main() 関数の本体の終わり。

よくあるご質問

クラスとは、データメンバーとメンバー関数を一つの型にまとめた、ユーザー定義の設計図です。オブジェクトとは、そのクラスから構築された具体的なインスタンスであり、設計図で記述されたデータの独自のコピーを保持します。

主な違いはデフォルトのアクセスです。クラスのメンバーはデフォルトではプライベートですが、 構造 デフォルトでは公開されています。どちらも継承、コンストラクタ、カプセル化をサポートしています。 C++.

C++ 3つの一般的なコンストラクタタイプをサポートしています。引数のないデフォルトコンストラクタ、メンバーを初期化するための値を受け取るパラメータ付きコンストラクタ、および同じクラスの既存のオブジェクトから新しいオブジェクトを作成するコピーコンストラクタです。

フレンド関数とは、クラスのプライベートメンバーとプロテクトメンバーへのアクセス権を持つ非メンバ関数です。クラス内ではfriendキーワードを用いて宣言されますが、定義はクラスの外で通常の関数と同様に行われます。

this ポインタは、すべての非静的メンバ関数内で使用できる暗黙のポインタです。これは関数を呼び出したオブジェクトを指し、コードがそのオブジェクト自身のメンバを参照したり、パラメータとデータメンバ間の名前の競合を解決したりすることを可能にします。

カプセル化とは、データとそれを操作する関数を単一のクラス内にまとめ、プライベートメンバーを使用して内部の詳細を隠蔽する技術です。パブリックメンバー関数は制御されたインターフェースを公開し、偶発的または不正なアクセスからデータを保護します。

はい。AIコーディングアシスタントは、短いプロンプトやコメントを、データメンバ、アクセス指定子、コンストラクタ、メンバ関数などを含む、動作するクラス定義に変換します。コードをコンパイルする前に、生成されたアクセスレベルと初期化ロジックを必ず確認してください。

Yes. GitHubコパイロット 入力と同時にクラス宣言、コンストラクタ、ゲッター、セッターを提案します。繰り返し発生する定型コードを迅速に処理できますが、ビルド前にメンバへのアクセス、コンストラクタのロジック、オブジェクトの使用方法を必ず確認してください。