C++の基礎: クラスの継承を学ぶ

提供: Support
移動先: 案内検索

概要

オブジェクト指向プログラミングとは、データ(オブジェクトの属性プロパティ)やコードブロック(オブジェクトのメソッド関数)を含むオブジェクトを統合する方法です。これらの属性やメソッドは、クラスに属する変数や関数であり、一般的には「クラスメンバ」と呼ばれています。C++では、クラスにはメンバ(属性、メソッド)があり、このクラス内の各メンバーを保護する必要があります。


継承は、クラスの他の機能と同様に、オブジェクト指向C++プログラミングにおける最も重要な概念の一つです。継承することで、あるクラスを別のクラスの観点から定義することができ、アプリケーションの作成や保守が容易になります。また、コードの機能を再利用することができ、実装時間を短縮することができます。継承は、クラス間の関係を実装する方法です。(例えば、長方形は形状の一種であり、楕円も形状の一種です。)

階層型継承

階層型継承では、1つの基底クラスから複数のサブクラスが継承されますが、これも継承の一種です。 つまり、単一の基本クラスから複数の派生クラスが作成されます。

単純に、同じ基底クラスから継承された複数のクラスを定義することができます。

class base1
{
};
 
class classname1 : public base1
{
};
 
class classname2 : public base1
{
};

簡単な階層型継承のコード例は、以下の通りです。

#include <iostream>
 
class Live
{
  public:
 int weight;
};
 
 
class Mammal: public Live
{
};
 
class Bird: public Live
{
};
 
 
int main()
{
 Mammal elephant;
 Bird eagle;
 
 elephant.weight = 5000;
 eagle.weight = 3;
 
 getchar();
 return 0;
}

上記のコード例では、MammalとBirdの両方が基底のliveクラスを継承しています。この例のように、階層型継承を使用することで、より複雑なツリー分岐したクラスを作成することができます。

多重継承

多重継承は、C++のもう一つの特徴で、一つのクラスが複数のクラスを継承することができます。例えば、派生クラスは、複数の基底クラスや派生クラスから継承することができます。

以下は、base1クラスとbase2クラスから継承している派生クラス(classname)の構文です。

class classname : public base1, public base2
{
};

多重継承の具体的なコード例は、以下の通りです。

#include <iostream>
#include <string>
 
class employee
{
  public:
 std::string name;
};
 
class engineer
{
  public:
 std::string profession;
};
 
class staff: public employee, public engineer
{
  public:
 std::string department;
 
 void info()
 {
 std::cout << "Name: " << name << '\n';
 std::cout << "Profession: " << profession << '\n';
 std::cout << "Department: " << department << '\n';
 }
};
 
int main()
{
 staff staff1;
 
 staff1.name = "Kate Smith"; // Inherited from employee class
 staff1.profession = "Computer Engineer"; // Inherited from engineer class
 staff1.department = "Backend Development Department";  // from staff class
 
 staff1.info();     // information function from staff class
 
 getchar();
 return 0;
}

上記のコード例では、nameプロパティはEmployeeクラスから、professionalプロパティはEngineerクラスから継承し、departmentプロパティはstaffクラスから、最後にinfo()メソッドはstaffクラスから呼び出されています。

関連情報