C++の基礎:クラスとオブジェクトを学ぶ
目次
概要
C++プログラミングを始めたての頃では、ほとんどのプログラマは、「オブジェクト指向プログラミングとは何ですか?」 「クラスとオブジェクトの違いは何ですか?」などの疑問を持つことがあると思います。この記事では、これらの質問にお答えします。C言語とC++の大きな違いの一つは、C++がクラスの使用をサポートするオブジェクト指向プログラミング(OOP)言語であることです。
オブジェクト指向プログラミング(OOP)
オブジェクト指向プログラミングとは、データ(オブジェクトの属性やプロパティ)やコードブロック(オブジェクトのメソッドや関数)を含むオブジェクトを統合する方法です。これらの属性やメソッドは、クラスに属する変数や関数であり、一般的には「クラスメンバ」と呼ばれています。
オブジェクト指向プログラミング(OOP)は、データを扱い、メモリ上の関数を扱うのに適した方法です。クラスやオブジェクトは、プロパティや関数を扱うのに最も適した方法です。オブジェクト指向プログラミングは、手続き型プログラミングに比べて多くの利点があり、C++プログラミング言語の最も特徴的な機能です。
クラスとオブジェクト
C++では、クラスはキーワードclassに続いてクラス名を用いて定義されます。クラスはオブジェクトの設計図であり、プログラムで使用できるユーザー定義のデータ型であり、オブジェクトのコンストラクタとして機能します。
オブジェクトは、別の言い方をすれば、クラスのインスタンス化です。C++プログラミングでは、ほとんどのコマンドは、クラスやオブジェクトの属性やメソッドと一緒に関連付けられています。
クラスは型であり(ほとんどのクラスの前にあるTという単語は型を表しています、例:TButtonクラス)、オブジェクトはそのクラスのインスタンス(例:Button1)で、そのクラスのプロパティとメソッドを持っています。
実生活で例をあげることができます。例えば、人間(Human)は、名前、年齢、体重、身長のプロパティなどの属性と、歩く、泳ぐ、見る、嗅ぐなどのメソッドを持つクラスであり、workerはこのクラスのオブジェクトであり、Humanクラスと同じ属性とメソッドを持っています。
クラスの作成
C++で新しいクラスを作成するにはどうすればよいですか?今回の人間の例のように、単純なHumanクラスは以下のように定義して作成できます。
class THuman
{
public:
string name;
int age, height;
};
クラスからオブジェクトを作成する
では、C++でクラスからオブジェクトを作成するにはどうすればよいのでしょうか?ここでは、THumanクラスを作成し、このクラスからworkerオブジェクトを以下のように簡単に定義することができます。
THuman worker;
ここでは、workerは変数で設定可能なすべての名前、年齢、身長の機能を持っています。
クラスからオブジェクトを設定する
C++でオブジェクトの変数を設定するにはどうすれば良いでしょうか? workerオブジェクトがメモリ上にあり、属性やメソッドのフィールドを持っています。以下のように、データ型の各変数を設定できます。
worker.name = "Kate";
worker.age = 35;
worker.height = 170;
以下は、全てのコード例です。
// Creating a Class
class THuman // The Class (Type) for Human
{
public: // Public properties and methods will be listed below
string name; // Attribute (string variable)
int age, height; // Attributes (int variable)
};
int main()
{
THuman worker; // Creating an object of THuman
// Setting attribute values of Object
worker.name = "Kate";
worker.age = 35;
worker.height = 170;
// Print out attribute values of an object
std::cout << "Name:" << worker.name << '\n';
std::cout << "Age:" << worker.age << '\n';
std::cout << "Height:" << worker.height << '\n';
return 0;
}
オブジェクトのポインタ
オブジェクトは、以下のようにポインタとしても定義できます。
THuman *worker;