English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 글에서는 C ++에서 계승에 대해 모든 지식을 다룹니다. 더 구체적으로, 계승이 무엇인지와 계승을 구현하는 다양한 방법에 대해 설명합니다.
C ++객체 지향 프로그래밍의 주요 기능 중 하나입니다. 이는 사용자가 기존 클래스(기본 클래스)에서 새로운 클래스를 생성할 수 있게 합니다.중.(도식 클래스)
도식 클래스는 기본 클래스의 모든 기능을 계승하고 자신만의 다른 기능을 가질 수 있습니다.
게임에서 세 개의 캐릭터가 필요하다고 가정해 보겠습니다.-하면수학 교사(Maths teacher)축구 선수(Footballer)와상인(Businessman)
모든 역할이 인간이므로 그들은 걸어다니고 말할 수 있습니다. 그러나 각자도 특별한 기술도 있습니다. 수학 교사는수학을 가르칠 수 있습니다.축구 선수는축구를 치다하면, 상인은기업 운영.
다음과 같이 세 개의 클래스를 독립적으로 만들어서 걸어다니고 말하고 특별한 기술을 수행할 수 있도록 할 수 있습니다.
각 클래스에서 각 캐릭터마다 동일한 걷기(Walk)와 말하기(Talk) 코드를 복사해야 합니다.
새로운 기능을 추가하려면-먹기(eat)를 가지고 있다면, 각 캐릭터마다 동일한 코드를 구현해야 합니다. 이는 오류(복사할 때)와 중복 코드를 유발하기 쉬우며.
만약 우리가Person클래스가 있습니다. 이 클래스는 말하기, 걷기, 먹기, 잠자기와 같은 기본 기능을 가지고 있으며, 우리의 역할에 따라 이 기능에 특별한 기술을 추가하면 쉬워집니다.많이이렇게 계승을 통해 완료됩니다.
계승을 사용하면 각 클래스마다 동일한 코드를 구현할 필요가 없습니다. 단순히계승그럼에도 불구하고.
따라서 수학 교사(도식 클래스)의 경우 Person(기본 클래스)의 모든 기능을 계승하고 새로운 기능을 추가할 수 있습니다.TeachMaths(수학 가르치기)。 또한, 축구 선수의 경우, Person의 모든 기능을 상속받았으며 새로운 기능을 추가했습니다.PlayFootball(축구 치기)와 같습니다. PlayFootball
이는 코드를 더 간결하고 이해하기 쉽고 확장 가능하게 합니다。
중요한 것은 기억해야 할 것은:계승을 사용할 때마다, 그것이 기본 클래스인지 여부와 관계없이 파생된 클래스는 조건을 만족해야 합니다. 위의 예제에서 수학 교사는한 사람، 축구 선수는한 사람. 당신은:상인은 기업입니다.
class Person { ... .. ... }; class MathsTeacher : public Person { ... .. ... }; class Footballer : public Person { .... .. ... };
위의 예제에서 Person 클래스는 기본 클래스이고, MathsTeacher와 Footballer 클래스는 Person에서 파생된 클래스입니다。
파생된 클래스는 클래스 선언과 함께 나타나며, 그 뒤에는 public 키워드와 파생된 클래스의 기본 클래스 이름이 따르는 콜론이 있습니다。
MathsTeacher와 Footballer는 Person에서 파생되었기 때문에 Person의 모든 멤버 데이터와 멤버 함수에 접근할 수 있습니다。
계승 개념을 사용하여 게임 캐릭터를 생성합니다。
#include <iostream> using namespace std; class Person { public: string profession; int age; Person(): profession("unemployed"), age(16) { } void display() { cout << "저의 직업은: " << profession << endl; cout << "저의 나이는: " << age << endl; walk(); talk(); } void walk() { cout << "저는 걸을 수 있습니다." << endl; } void talk() { cout << "저는 말할 수 있습니다." << endl; } }; // MathsTeacher 클래스는 기본 클래스 Person에서 파생됩니다。 class MathsTeacher : public Person { public: void teachMaths() { cout << "저는 수학을 가르칠 수 있습니다." << endl; } }; // Footballer 클래스는 기본 클래스 Person에서 파생됩니다。 class Footballer : public Person { public: void playFootball() { cout << "저는 축구를 치겠습니다." << endl; } }; int main() { MathsTeacher teacher; teacher.profession = "교사"; teacher.age = 23; teacher.display(); teacher.teachMaths(); Footballer footballer; footballer.profession = "선수"; footballer.age = 19; footballer.display(); footballer.playFootball(); return 0; }
출력 결과
저의 직업은: 교사 저의 연령은: 23 저는 걸을 수 있습니다. 저는 말할 수 있습니다 저는 수학을 가르칠 수 있습니다. 저의 직업은: 선수 저의 연령은: 19 저는 걸을 수 있습니다. 저는 말할 수 있습니다 저는 축구를 치겠습니다.
이 프로그램에서 Person은 기본 클래스이며, MathsTeacher와 Footballer는 기본 클래스 Person에서 파생된 클래스입니다.
Person 클래스는 두 개의 데이터 멤버를 가지고 있습니다- profession과 age. 또한, 두 개의 멤버 함수가 있습니다- walk()와 talk().
또한, MathsTeacher와 Footballer는 Person의 모든 데이터 멤버와 멤버 함수에 접근할 수 있습니다.
하지만, MathsTeacher와 Footballer는 각각 자신의 멤버 함수를 가지고 있습니다: teachMaths()와 playFootball(). 이 함수들은 자신의 클래스 만 접근할 수 있습니다.
main() 함수에서 새로운 MathsTeacher teacher 객체를 생성합니다.
이유는, Person의 데이터 멤버에 접근할 수 있기 때문에 teacher의 profession(직업)과 age(연령)을 설정할 수 있습니다. Person 클래스에서 정의된 display() 함수를 사용하여 이 데이터를 표시합니다. 또한, MathsTeacher 클래스에서 teachingMaths() 함수가 정의되었습니다.
또한, 새로운 Footballer footballer 객체를 생성합니다. 이 객체는 Person의 데이터 멤버에 접근할 수 있으며, display() 함수를 호출하여 표시할 수 있습니다. 그리고足球运动员(footballer)만 접근할 수 있는 playFootball() 함수도 있습니다.
기본 클래스에서 파생 클래스를 생성할 때, 기본 클래스의 데이터 멤버를 상속하기 위해 다른 접근 지시자를 사용할 수 있습니다.
이것들은 public, protected 또는 private 일 수 있습니다.
위의 예제에서 기본 클래스 Person이 MathsTeacher와 football로 공개적으로 상속되었습니다.
에 대해 알아보세요C ++의 공통 상속, 보호 상속 및 프라이빗 상속보다 많은 정보.
기본 클래스와派생 클래스의 멤버 함수가 같은 이름과 매개변수를 가지고 있다고 가정합니다.
기본 클래스의 객체를 생성하고 해당 멤버 함수에 접근하려고 시도하면, 기본 클래스의 멤버 함수만 호출됩니다.
기본 클래스의 멤버 함수를 대체하는派생 클래스의 멤버 함수가 있습니다.
에 대해 알아보세요C ++의 함수 재정의보다 많은 정보.