인 스 턴 스 코드 설명 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+계승 특성 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!

    좋은 웹페이지 즐겨찾기