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

C++ 상속

C++ 상속

이 튜토리얼에서는 예제를 통해 C++의 상속에 대해 배웁니다.

상속은 C++에서 객체 지향 프로그래밍의 핵심 기능 중 하나입니다. 기존 클래스(기본 클래스)에서 새 클래스(파생 클래스)를 만들 수 있습니다.

파생 클래스는 기본 클래스의 기능을 상속합니다. 고유한 추가 기능을 가질 수 있습니다. 예를 들어,

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 사용의 차이점에 대해 알아보겠습니다. , publicprotected 이 튜토리얼의 뒷부분에서.

<시간>

관계와 관계

상속은 관계입니다. . 관계인 경우에만 상속을 사용합니다. 두 클래스 사이에 존재합니다.

다음은 몇 가지 예입니다.

<시간>

예제 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!!

여기, dog1 (파생 클래스 Dog의 개체 ) 기본 클래스 Animal의 멤버에 액세스할 수 있습니다. . Dog 때문입니다. Animal에서 상속됨 .

// Calling members of the Animal class
dog1.eat();
dog1.sleep();
<시간>

C++ 보호 회원

액세스 수정자 protected C++ 상속과 관련하여 특히 관련이 있습니다.

private처럼 회원, protected 멤버는 클래스 외부에서 액세스할 수 없습니다. 그러나 파생 클래스에서 액세스할 수 있습니다. 및 친구 수업/기능 .

protected이 필요합니다. 클래스의 데이터를 숨기고 싶지만 해당 데이터가 파생 클래스에 상속되기를 원하는 경우 멤버를 선택합니다.

protected에 대해 자세히 알아보려면 C++ Access Modifiers 자습서를 참조하세요.

<시간>

예시 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
};

클래스를 파생할 수 있는 다양한 방법을 액세스 모드라고 합니다. . 이러한 액세스 모드는 다음과 같은 효과가 있습니다.

  1. 공개: 파생 클래스가 public에 선언된 경우 모드에서 기본 클래스의 멤버는 그대로 파생 클래스에 상속됩니다.
  2. 비공개: 이 경우 기본 클래스의 모든 멤버는 private가 됩니다. 파생 클래스의 멤버입니다.
  3. 보호됨: public 기본 클래스의 멤버는 protected가 됩니다. 파생 클래스의 멤버입니다.

private 기본 클래스의 멤버는 항상 private입니다. 파생 클래스에서.

자세한 내용은 C++ 공개, 비공개, 보호 상속 자습서를 참조하세요.

<시간>

상속에서 멤버 함수 재정의

기본 클래스와 파생 클래스에 이름과 인수가 같은 멤버 함수가 있다고 가정합니다.

파생 클래스의 개체를 만들고 해당 멤버 함수에 액세스하려고 하면 기본 클래스 대신 파생 클래스의 멤버 함수가 호출됩니다.

파생 클래스의 멤버 함수가 기본 클래스의 멤버 함수를 재정의합니다.

C++의 함수 재정의에 대해 자세히 알아보세요.

<시간>

권장 자료: C++ 다중 상속


C 언어

  1. C# 정적 키워드
  2. C# 중첩 클래스
  3. C++ 연산자
  4. C++ 클래스 및 개체
  5. C++ 공개, 보호 및 비공개 상속
  6. C++ 클래스 템플릿
  7. 파이썬 상속
  8. C++의 스토리지 클래스
  9. C++의 다형성
  10. C++의 데이터 추상화