산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 다중, 다중 레벨 및 계층적 상속

C++ 다중, 다중 레벨 및 계층적 상속

이 튜토리얼에서는 C++ 프로그래밍의 다양한 상속 모델(예제를 통해 다중, 다중 레벨 및 계층적 상속)에 대해 알아봅니다.

상속은 객체 지향 프로그래밍 언어의 핵심 기능 중 하나입니다. 이를 통해 소프트웨어 개발자는 기존 클래스에서 새 클래스를 파생할 수 있습니다. 파생 클래스는 기본 클래스(기존 클래스)의 기능을 상속합니다.

C++ 프로그래밍에는 다양한 상속 모델이 있습니다.

<시간>

C++ 다단계 상속

C++ 프로그래밍에서는 기본 클래스에서 클래스를 파생시킬 수 있을 뿐만 아니라 파생 클래스에서 클래스를 파생시킬 수도 있습니다. 이러한 형태의 상속을 다단계 상속이라고 합니다.

class A { 
... .. ... 
};
class B: public A {
... .. ...
};
class C: public B {
... ... ...
};

여기, 클래스 B 기본 클래스 A에서 파생됩니다. 및 클래스 C 파생 클래스 B에서 파생됩니다. .

<시간>

예제 1:C++ 다단계 상속

#include <iostream>
using namespace std;

class A {
    public:
      void display() {
          cout<<"Base class content.";
      }
};

class B : public A {};

class C : public B {};

int main() {
    C obj;
    obj.display();
    return 0;
}

출력

Base class content.

이 프로그램에서 클래스 C B 클래스에서 파생됨 (기본 클래스 A에서 파생됨 ).

obj C 클래스의 객체 main()에 정의되어 있습니다. 기능.

display() 함수가 호출됩니다. display() 클래스 A 실행됩니다. display()이 없기 때문입니다. C 클래스의 함수 및 클래스 B .

컴파일러는 먼저 display()를 찾습니다. C 클래스의 함수 . 함수가 존재하지 않으므로 B 클래스에서 함수를 찾습니다. (CB에서 파생됨 ).

이 함수는 B 클래스에도 존재하지 않습니다. , 그래서 컴파일러는 A 클래스에서 그것을 찾습니다. (BA에서 파생됨 ).

display()인 경우 함수가 C에 있습니다. , 컴파일러는 display()를 재정의합니다. 클래스 A (멤버 함수 재정의 때문에).

<시간>

C++ 다중 상속

C++ 프로그래밍에서 클래스는 둘 이상의 부모로부터 파생될 수 있습니다. 예를 들어, A 클래스 Bat 기본 클래스 포유류에서 파생됩니다. 및 날개 동물 . 박쥐는 포유류이자 날개 달린 동물이기 때문에 이해가 됩니다.

<그림> <시간>

예제 2:C++ 프로그래밍의 다중 상속

#include <iostream>
using namespace std;

class Mammal {
  public:
    Mammal() {
      cout << "Mammals can give direct birth." << endl;
    }
};

class WingedAnimal {
  public:
    WingedAnimal() {
      cout << "Winged animal can flap." << endl;
    }
};

class Bat: public Mammal, public WingedAnimal {};

int main() {
    Bat b1;
    return 0;
}

출력

Mammals can give direct birth.
Winged animal can flap.
<시간>

다중 상속의 모호성

다중 상속의 가장 명백한 문제는 함수 재정의 중에 발생합니다.

두 개의 기본 클래스에 파생 클래스에서 재정의되지 않는 동일한 기능이 있다고 가정합니다.

파생 클래스의 개체를 사용하여 함수를 호출하려고 하면 컴파일러에서 오류를 표시합니다. 컴파일러가 어떤 함수를 호출할지 모르기 때문입니다. 예를 들어,

class base1 {
  public:
      void someFunction( ) {....}  
};
class base2 {
    void someFunction( ) {....} 
};
class derived : public base1, public base2 {};

int main() {
    derived obj;
    obj.someFunction() // Error!  
}

이 문제는 base1 또는 base2 클래스로 지정할 함수를 지정하는 범위 확인 기능을 사용하여 해결할 수 있습니다.

int main() {
    obj.base1::someFunction( );  // Function of base1 class is called
    obj.base2::someFunction();   // Function of base2 class is called.
}
<시간>

C++ 계층적 상속

기본 클래스에서 둘 이상의 클래스가 상속되는 경우 이를 계층적 상속이라고 합니다. 계층적 상속에서는 자식 클래스에 공통적으로 있는 모든 기능이 기본 클래스에 포함됩니다.

예를 들어 물리, 화학, 생물학은 과학 수업에서 파생됩니다. 마찬가지로 Dog, Cat, Horse는 Animal 클래스에서 파생됩니다.

<시간>

계층적 상속의 구문

class base_class {
     ... .. ...
}

class first_derived_class: public base_class {
     ... .. ...
}

class second_derived_class: public base_class {
     ... .. ...
}

class third_derived_class: public base_class {
     ... .. ...
}
<시간>

예 3:C++ 프로그래밍의 계층적 상속

// C++ program to demonstrate hierarchical inheritance

#include <iostream>
using namespace std;

// base class
class Animal {
   public:
    void info() {
        cout << "I am an animal." << endl;
    }
};

// derived class 1
class Dog : public Animal {
   public:
    void bark() {
        cout << "I am a Dog. Woof woof." << endl;
    }
};

// derived class 2
class Cat : public Animal {
   public:
    void meow() {
        cout << "I am a Cat. Meow." << endl;
    }
};

int main() {
    // Create object of Dog class
    Dog dog1;
    cout << "Dog Class:" << endl;
    dog1.info();  // Parent Class function
    dog1.bark();

    // Create object of Cat class
    Cat cat1;
    cout << "\nCat Class:" << endl;
    cat1.info();  // Parent Class function
    cat1.meow();

    return 0;
}

출력

Dog Class:
I am an animal.
I am a Dog. Woof woof.

Cat Class:
I am an animal.
I am a Cat. Meow.

여기에서 DogCat 클래스는 Animal에서 파생됩니다. 수업. 따라서 두 파생 클래스 모두 info()에 액세스할 수 있습니다. Animal에 속하는 함수 수업.


C 언어

  1. C# 클래스 및 개체
  2. C# 추상 클래스 및 메서드
  3. C# 부분 클래스 및 부분 메서드
  4. C# 봉인된 클래스 및 메서드
  5. C++ 클래스 및 개체
  6. C++ 공개, 보호 및 비공개 상속
  7. C++ friend 함수 및 friend 클래스
  8. 구조체와 클래스의 차이점:C++ 예제로 설명
  9. C++의 스토리지 클래스
  10. C++ 날짜 및 시간