인 스 턴 스 코드 설명 c+계승 특성
파생 류 에 서 는 필요 에 따라 추가 데이터 구성원 과 구성원 함 수 를 추가 할 수 있 으 며,계승 한 원 구성원 함수 에 대해 새로운 정 의 를 내 릴 수 있다.
기본 포인터 나 인용 은 파생 대상 을 가리 킬 수 있 으 며,반대로 강제 형식 으로 만 전환 할 수 있다.
파생 대상 은 기본 적 인 비 사유 구성원 을 사용 할 수 있다.
파생 대상 을 사용 하여 기본 대상 이나 할당 을 초기 화 할 수 있 습 니 다.
일반적으로 기본 대상 을 파생 대상(위의 제3 조)에 부여 하 는 것 을 허용 하지 않 으 며,특수 한 경우 에는 가능 하 다.
파생 클래스 대상 이 생 성 된 파생 클래스 대상 을 초기 화 했 습 니 다.
이미 파생 대상 이 다른 파생 대상 에 게 값 을 부여 했다.
파생 클래스 대상 의 분석 함수 가 호출 되면 기본 클래스 의 분석 함 수 를 자동 으로 호출 합 니 다.
C++11 은 구조 함 수 를 계승 할 수 있 는 메커니즘 을 추 가 했 지만 파생 류 는 기본적으로 구조 함수 와 분석 함 수 를 계승 할 수 없습니다.
class RatedPlayer : public TableTennisPlayer
{
private:
unsigned int rating; // add a data member
public:
RatedPlayer (unsigned int r = 0, const string &fn = "none", const string &ln = "none", bool ht = false);
RatedPlayer (unsigned int r, const TableTennisPlayer &tp);
unsigned int Rating() const { return rating; } // add a method
void ResetRating (unsigned int r) { rating = r; } // add a method
};
구조 함 수 는 반드시 새 구성원 과 계 승 된 구성원 에 게 데 이 터 를 제공 해 야 한다.
RatedPlayer::RatedPlayer(unsigned int r, const string &fn, const string &ln, bool ht) : TableTennisPlayer(fn, ln, ht)
{
rating = r;
}
4.567917.파생 류 구조 함 수 는 반드시 기본 구조 함 수 를 사용 해 야 한다.파생 류 대상 을 만 들 때 프로그램 은 먼저 기본 대상(계승 데이터 구성원 초기 화)을 만 든 다음 에 파생 류 구조 함 수 를 호출 해 야 한다.C++멤버 초기 화 목록 문법 을 사용 하여 이 작업 을 완료 합 니 다4.567917.기본 구조 함 수 를 호출 하지 않 으 면 기본 구조 함 수 를 암시 적 으로 호출 합 니 다.기본 구조 함 수 를 사용 하지 않 으 면 정확 한 기본 구조 함 수 를 표시 해 야 합 니 다.파생 클래스 대상 이 만 료 되면 프로그램 은 먼저 파생 클래스 분석 함 수 를 호출 한 다음 에 기본 클래스 분석 함 수 를 자동 으로 호출 합 니 다.
파생 클래스 를 사용 하려 면 프로그램 이 기본 클래스 성명 에 접근 할 수 있어 야 합 니 다.
파생 대상 은 기본 적 인 방법 을 사용 할 수 있 으 며,조건 은 방법 이 사유 적 인 것 이 아니다(즉,공유 와 보호).
기본 포인터 가 디 스 플레이 형식 변환 을 하지 않 은 상태 에서 파생 대상 을 가리 킬 수 있 습 니 다.기본 클래스 인용 은 디 스 플레이 형식 변환 없 이 파생 클래스 대상 을 참조 할 수 있 습 니 다.
RatedPlayer rplayer(1140, "Mallory", "Duck", true);
TableTennisPlayer &rt = rplayer;
TableTennisPlayer *pt =&rplayer;
rt.Name(); // invoke Name() with reference
pt->Name(); // invoke Name() with pointer
기본 클래스 대상 과 주 소 를 파생 클래스 참조 와 지침 에 부여 할 수 없습니다.강제 변환 을 사용 하지 않 는 한(우 원 함 수 는 구성원 함수 가 아니 기 때문에 계승 할 수 없 지만,기본 클래스 의 우 원 함 수 를 사용 하려 면 이 방법 을 사용 할 수 있 지만 잘못 사용 하지 않도록 조심해 야 합 니 다).기본 클래스 성명 의 함수 참조 매개 변수 나 포인터 매개 변 수 는 기본 클래스 대상 이나 파생 클래스 대상 및 그들의 주소 에 사용 할 수 있 습 니 다.
void Show(const TableTennisPlayer &rt)
{
...
}
TableTennisPlayer player1("Tara", "Boomdea", false);
RatedPlayer rplayer1(1140, "Mallory", "Duck", true);
Show(player1); // works with TableTennisPlayer argument
Show(rplayer1); // works with RatedPlayer argument
const TabletTennisPlayer*rt 로 구 성 된 경 우 를 생략 하고 위 와 비슷 합 니 다.호환성 속성 참조:기본 클래스 대상 을 파생 클래스 대상 으로 초기 화 할 수 있 습 니 다.
RatedPlayer olaf1(1840, "Olaf", "Loaf", true);
TableTennisPlayer olaf2(olaf1);
일치 하 는 구조 함수 의 원형:
TableTennisPlayer(const RatedPlayer &); // doesn't exit
클래스 에 이 구조 함수 가 없 지만 암시 적 복사 구조 함수 가 존재 합 니 다.
// implicit copy constructor
TableTennisPlayer(const TableTennisPlayer &);
즉,olaf 2 를 RatedPlayer 대상 olaf 1 에 포 함 된 TableTennisPlayer 대상 으로 초기 화 합 니 다.(파생 클래스 에 포 함 된 기본 클래스 대상 을 사용 하여 대상 의 기본 클래스 대상 을 초기 화 합 니 다)마찬가지 로 파생 대상 을 기본 대상 에 게 부여 할 수도 있다.
RatedPlayer olaf1(1840, "Olaf", "Loaf", true);
TableTennisPlayer winner;
winner = olaf1; // assign derived to base object
이러한 상황 에서 프로그램 은 암시 적 으로 할당 연산 자 를 다시 불 러 옵 니 다.
TableTennisPlayer &operator=(const TableTennisPlayer &) const;
위 와 유사 하 게 파생 류 에 포 함 된 기본 클래스 대상 을 사용 하여 목표 기본 클래스 대상 을 구성원 별로 할당 합 니 다.특수 한 기본 대상 으로 파생 대상 에 게 값 을 부여 하 는 경우
파생 류 가 기본 대상 을 파생 대상 으로 바 꾸 는 구조 함 수 를 포함 하거나 파생 류 가 기본 대상 을 파생 대상 에 부여 하 는 할당 연산 자 를 정의 하면 파생 류 대상 으로 기본 대상 에 게 값 을 부여 할 수 있다.
기 존 파생 클래스 대상 으로 생 성 된 파생 클래스 대상 을 초기 화 합 니 다.
클래스 구성원 이나 계승 하 는 클래스 구성 요 소 를 복사 할 때 이러한 복사 구조 함 수 를 사용 하여 이 루어 지 며 계승 하 는 기본 클래스 대상 에 게 도 적합 합 니 다.
기 존의 파생 대상 으로 다른 파생 대상 에 게 값 을 부여 하 다.
구성원 할당 에 따라 클래스 구성원 할당 연산 자 를 호출 하고 기본 클래스 의 할당 연산 자 를 사용 하여 기본 구성 요소(계승 하 는 기본 클래스 대상)에 할당 합 니 다.
파생 류 가 동적 메모리 분 배 를 사용 하면 파생 류 의 석조 함수,복제 구조 함수,복제 연산 자 는 모두 해당 하 는 기본 방법 으로 기본 요 소 를 처리 해 야 합 니 다(호출 기본 구조 함수 와 복제 연산 자 표시).
4.567917.석조 함수 에 대해 이것 은 자동 으로 완 성 된 것 이다4.567917.복제 구조 함수 에 대해 이것 은 구성원 목록 에서 기본 클래스 의 복제 구조 함 수 를 초기 화 하 는 것 입 니 다.이렇게 하지 않 으 면 기본 클래스 의 기본 구조 함 수 를 자동 으로 호출 합 니 다
hasDMA &hasDMA::operator=(const hasDMA &has)
{
if (this == &hs)
return *this;
baseDMA::operator=(hs); // copy base portion
...
return *this;
}
이상 은 인 스 턴 스 코드 가 c+계승 특성 에 대한 상세 한 내용 입 니 다.c+계승 특성 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 원활 공사 & & 원활 공사 (차 트 법)모 성 은 도시 의 교통 상황 을 조사 하여 기 존의 도시 도로 통계 표를 얻 었 고 표 에는 모든 도로 가 직접 연 결 된 도시 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 도시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.