工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++ 継承

C++ の継承

このチュートリアルでは、例を使って C++ の継承について学びます。

継承は、C++ でのオブジェクト指向プログラミングの重要な機能の 1 つです。既存のクラス (基本クラス) から新しいクラス (派生クラス) を作成できます。

派生クラスは基本クラスから機能を継承します 独自の追加機能を持つことができます。たとえば、

class Animal {
    // eat() function
    // sleep() function
};

class Dog : public Animal {
    // bark() function
};

ここでは、Dog クラスは Animal から派生します クラス。 Dog以降 Animal から派生 、 Animal のメンバー Dog にアクセス可能です .

<図>

キーワード public の使用に注意してください Animal から Dog を継承しています。

class Dog : public Animal {...};

キーワード private も使用できます および protected public の代わりに . private の使用の違いについて学習します。 、 public および protected


関係

継承は is-a 関係 . is-a Relationship の場合にのみ継承を使用します 2 つのクラスの間に存在します。

以下にいくつかの例を示します:


例 1:C++ 継承の簡単な例

// C++ program to demonstrate inheritance

#include <iostream>
using namespace std;

// base class
class Animal {

   public:
    void eat() {
        cout << "I can eat!" << endl;
    }

    void sleep() {
        cout << "I can sleep!" << endl;
    }
};

// derived class
class Dog : public Animal {
 
   public:
    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    // Create object of the Dog class
    Dog dog1;

    // Calling members of the base class
    dog1.eat();
    dog1.sleep();

    // Calling member of the derived class
    dog1.bark();

    return 0;
}

出力

I can eat!
I can sleep!
I can bark! Woof woof!!

ここで、犬1 (派生クラス Dog のオブジェクト ) は基本クラス Animal のメンバーにアクセスできます . Dogだからです Animal から継承されます .

// Calling members of the Animal class
dog1.eat();
dog1.sleep();

C++ 保護メンバー

アクセス修飾子 protected C++ の継承に関しては特に重要です。

private のように メンバー、protected クラス外からメンバーにアクセスすることはできません。ただし、派生クラスからアクセスできます フレンド クラス/関数 .

protected が必要です クラスのデータを非表示にしたいが、そのデータをその派生クラスに継承させたい場合のメンバー。

protected の詳細については、C++ アクセス修飾子のチュートリアルを参照してください。


例 2 :C++ 保護メンバー

// C++ program to demonstrate protected members

#include <iostream>
#include <string>
using namespace std;

// base class
class Animal {

   private:
    string color;

   protected:
    string type;

   public:
    void eat() {
        cout << "I can eat!" << endl;
    }

    void sleep() {
        cout << "I can sleep!" << endl;
    }

    void setColor(string clr) {
        color = clr;
    }

    string getColor() {
        return color;
    }
};

// derived class
class Dog : public Animal {

   public:
    void setType(string tp) {
        type = tp;
    }

    void displayInfo(string c) {
        cout << "I am a " << type << endl;
        cout << "My color is " << c << endl;
    }

    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    // Create object of the Dog class
    Dog dog1;

    // Calling members of the base class
    dog1.eat();
    dog1.sleep();
    dog1.setColor("black");

    // Calling member of the derived class
    dog1.bark();
    dog1.setType("mammal");

    // Using getColor() of dog1 as argument
    // getColor() returns string data
    dog1.displayInfo(dog1.getColor());

    return 0;
}

出力

I can eat!
I can sleep!
I can bark! Woof woof!!
I am a mammal
My color is black

ここで、変数 type protected です したがって、派生クラス Dog からアクセスできます . type を初期化したので、これを見ることができます Dog で 関数 setType() を使用するクラス .

一方、private 変数 Dog で初期化できません .

class Dog : public Animal {

    public:
      void setColor(string clr) {
          // Error: member "Animal::color" is inaccessible
          color = clr; 
      }
};

また、protected キーワードがデータを隠しているため、type にアクセスできません Dog のオブジェクトから直接 または Animal クラス。

// Error: member "Animal::type" is inaccessible
dog1.type = "mammal";

C++ 継承のアクセス モード

以前のチュートリアルでは、public、private、protected などの C++ アクセス指定子について学習しました。

これまでは public を使用してきました 既存の基本クラスからクラスを継承するためのキーワード。ただし、 private も使用できます と protected クラスを継承するためのキーワード。たとえば、

class Animal {
    // code
};

class Dog : private Animal {
    // code
};
class Cat : protected Animal {
    // code
};

クラスを派生させるさまざまな方法は、アクセス モードとして知られています。 .これらのアクセス モードには次の効果があります:

<オール>
  • 公開: public で派生クラスが宣言されている場合 モードの場合、基本クラスのメンバーはそのまま派生クラスに継承されます。
  • 非公開: この場合、基本クラスのすべてのメンバーは private になります。 派生クラスのメンバー
  • 保護: public 基本クラスのメンバーは protected になります 派生クラスのメンバー
  • private 基本クラスのメンバーは常に private です 派生クラスで。

    詳細については、C++ パブリック、プライベート、保護された継承のチュートリアルをご覧ください。


    継承でオーバーライドするメンバー関数

    基本クラスと派生クラスに、同じ名前と引数を持つメンバー関数があるとします。

    派生クラスのオブジェクトを作成し、そのメンバー関数にアクセスしようとすると、基本クラスのメンバー関数ではなく、派生クラスのメンバー関数が呼び出されます。

    派生クラスのメンバー関数は、基本クラスのメンバー関数をオーバーライドします。

    C++ での関数のオーバーライドの詳細をご覧ください。


    推奨読書: C++ 多重継承


    C言語

    1. C# 静的キーワード
    2. C# ネストされたクラス
    3. C++ 演算子
    4. C++ クラスとオブジェクト
    5. C++ の公開、保護、非公開の継承
    6. C++ クラス テンプレート
    7. Python の継承
    8. C++ のストレージ クラス
    9. C++ のポリモーフィズム
    10. C++ でのデータの抽象化
    11. C++ でのデータのカプセル化