c++의 계승 관계
계승 개념
계승(inheritance)체 제 는 대상 프로그램 을 대상 으로 코드 를 재 활용 할 수 있 도록 설계 하 는 가장 중요 한 수단 으로 프로그래머 가 기 존의 특성 을 유지 하 는 토대 에서 확장 하고 기능 을 추가 할 수 있 도록 한다.이렇게 새로운 종 류 를 만들어 파생 류 라 고 한다.계승 은 대상 을 대상 으로 하 는 프로그램 디자인 의 차원 구 조 를 나타 내 고 간단 한 것 에서 복잡 한 인지 과정 을 나 타 냈 다.
대상 을 향 한 상속 관 계 는 부류 간 의 부자 관 계 를 가리킨다.아 날로 그 로 다음 과 같이 표시 합 니 다.
2.왜 상속 이 있어 야 합 니까?계승의 의미?
계승 은 대상 에서 코드 를 재 활용 하 는 수단 이기 때문이다.계승 을 통 해 부모 클래스 의 모든 기능 을 얻 을 수 있 고,하위 클래스 에서 부모 클래스 의 기 존 기능 을 다시 쓰 거나 부모 클래스 에 없 는 기능 을 추가 할 수 있 습 니 다.
3.자 류 는 특수 한 부류 라 는 것 을 어떻게 이해 합 니까?
하위 클래스 는 부모 클래스 의 모든 속성 과 행 위 를 계승 할 뿐만 아니 라 하위 클래스 에서 부모 클래스 의 기 존 기능 을 다시 쓰 고 자신의 새로운 속성 과 새로운 방법 을 추가 할 수 있 기 때문이다.하위 대상 을 부모 대상 으로 사용 할 수 있다 는 얘 기다.
4 계승의 법칙
1)자 류 는 특수 한 부류 이다
2)하위 클래스 대상 은 부모 클래스 대상 을 직접 초기 화 할 수 있다.
3)하위 클래스 대상 은 부모 클래스 대상 에 게 직접 값 을 부여 할 수 있다.
5.계승 중인 방문 단계
1)Public:클래스 의 내부 와 외부 에서 접근 할 수 있 습 니 다.
2)protected::클래스 내부 에서 사용 할 수 있 으 며,클래스 외부 에서 직접 사용 할 수 없습니다.그러나 상속 관계 가 있 을 때 하위 클래스 에서 부모 클래스 의 proctected 멤버 를 사용 할 수 있다.
3)private:클래스 내부 에서 만 사용 할 수 있 으 며 클래스 외부 에서 사용 할 수 없습니다.
주:클래스 의 내부:현재 클래스 의 역할 영역 에서(하위 클래스 의 역할 영역 은 포함 되 지 않 음);클래스 의 외부:클래스 내부 이외 의 역할 영역(하위 클래스 의 역할 영역 포함)
문제 1:하위 클래스 는 부모 클래스 의 private 멤버(비공 유 멤버)를 직접 방문 할 수 있 습 니까?(No)
1)대상 이론 에 대한 측면 에서 분석 한 결과 자 류 는 부류 의 모든 속성 과 행 위 를 가지 고 있 음 을 알 수 있다.결론:Yes
2)c++의 문법 적 측면 에서 분석 하면 외부 에서 접근 할 수 없 는 private 구성원 을 알 수 있 고 결론:No
문제 2:proctected 키워드 의 존재 의 미 를 말 해 볼 까?
proctected 키 워드 는 계승 을 위해 존재 합 니 다.그러면 하위 클래스 에서 부모 클래스 의 proctected 구성원 을 방문 할 수 있 고 외부 에서 부모 클래스 의 proctected 구성원 을 직접 방문 하 는 것 도 허용 하지 않 습 니 다.
문제 3:클래스 에서 클래스 의 방문 단 계 를 어떻게 선택 합 니까?다음 그림 을 보시오
6 상속 중의 상속 방식
1)Public 계승 방식-부모 구성원 은 하위 클래스 에서 기 존의 방문 단 계 를 유지 합 니 다.
2)proctected 상속 방식-아버지 류 중의 공유 구성원 은 하위 클래스 에서 proctected 구성원 이 되 었 고 다른 것 은 변 하지 않 는 다.
3)private 상속 방식(기본 값)-부모 구성원 이 하위 클래스 에서 private 구성원 이 되 었 습 니 다.
귀납 할 수 있 는 것 은:
결론:어떤 계승 방식 을 선택 하 든 하위 클래스 가 부모 구성원 을 방문 하 는 등급 에 영향 을 주지 않 는 다.
주:1)c++프로젝트 에 서 는 Public 계승 방식 만 사용 합 니 다.
2)c++파생 언어(jave,c\#)는 Public 계승 방식 만 지원 합 니 다.
3)proctected,private 상속 방식 이 가 져 온 복잡성 은 실용성 보다 훨씬 크다.(버 리 고 쓰 지 않다
코드 로 아 날로 그 기능 구현:
코드 는 다음 과 같 습 니 다:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class Object
{
protected:
string mName;
string mInfo;
public:
Object()
{
mName = "Object";
mInfo = "";
}
inline string getName()
{
return mName;
}
inline string getInfo()
{
return mInfo;
}
};
class Point : public Object
{
private:
int mX;
int mY;
public:
Point(int x = 0, int y = 0)
{
ostringstream oss;
mX = x;
mY = y;
mName = "Point";
oss << "Point(" << mX << ", " << mY << ")";
mInfo = oss.str();
}
inline int getX()
{
return mX;
}
inline int getY()
{
return mY;
}
};
class Line : public Object
{
private:
Point mP1;
Point mP2;
public:
Line(Point p1, Point p2)
{
mP1 = p1;
mP2 = p2;
mName = "Line";
mInfo = "Line from " + p1.getInfo() + " to " + p2.getInfo();
}
inline Point getStartPoint()
{
return mP1;
}
inline Point getEndPoint()
{
return mP2;
}
};
int main(int argc, char const *argv[])
{
Object obj;
cout << obj.getName() << endl;
cout << obj.getInfo() << endl << endl;
Point p1(1, 2);
Point p2(3, 4);
cout << p1.getName() << endl;
cout << p1.getInfo() << endl;
cout << p2.getName() << endl;
cout << p2.getInfo() << endl << endl;
Line line(p1, p2);
cout << line.getName() << endl;
cout << line.getInfo() << endl << endl;
return 0;
}
c++의 상속 관계 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 c++상속 관계 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.