C++파생 클래스 와 기본 클래스 의 변환 규칙
fun: void fun(A& r)// A
{
cout<<r.num<<endl;
} // num
A , A 。 , , fun B b1 : fun(b1); B b1 num 。 , fun 。
, , 。
11.10 Student( ), Student Graduate( ), 。 , , 。 num( ),name( ) score( )3 ,Graduate pay( )。
:
[code]
#include <iostream>
#include <string>
Graduate::Graduate(int n, string nam,float s,float p):Student(n,nam,s),pay(p){ }
using namespace std;
class Student// Student
{
public :
Student(int, string,float );//
void display( );//
private :
int num;
string name;
float score;
};
Student::Student(int n, string nam,float s) //
{
num=n;
name=nam;
score=s;
}
void Student::display( )//
{
cout<<endl<<″num:″<<num<<endl;
cout<<″name:″<<name<<endl;
cout<<″score:″<<score<<endl;
}
class Graduate:public Student// Graduate
{
public :
Graduate(int, string ,float ,float );//
void display( );//
private :
float pay;//
};
//
void Graduate::display() //
{
Student::display(); // Student display
cout<<″pay=″<<pay<<endl;
}
int main()
{
Student stud1(1001,″Li″,87.5); // Student stud1
Graduate grad1(2001,″Wang″,98.5,563.5); // Graduate grad1
Student *pt=&stud1;// Student stud1
pt->display( ); // stud1.display
pt=&grad1; // grad1
pt->display( ); // grad1.display
}
가 있 으 면 많은 독자 들 은 파생 류 에 같은 이름 의 display 구성원 함수 가 두 개 있 고 같은 이름 으로 덮어 쓰 는 규칙 에 따라 파생 류 Graduate 대상 의 display 함수 가 호출 되 어야 한다 고 생각 할 것 이다.Graduate:display 함수 과정 에서 Student:display 함수,출력 num,name,score 를 호출 한 다음 에 pay 의 값 을 출력 해 야 한다.사실 이러한 추론 은 잘못된 것 입 니 다.먼저 프로그램의 출력 결 과 를 보십시오.num:1001 name:Li score:87.5 num:2001 name:wang score:98.5 는 pay 의 값 을 출력 하지 않 았 습 니 다.문 제 는 pt 가 Student 류 대상 을 가리 키 는 포인터 변수 입 니 다.grad 1 을 가리 키 더 라 도 실제 pt 는 grad 1 에서 기본 적 인 계승 부분 을 가리 키 고 있 습 니 다.기본 대상 을 가리 키 는 지침 을 통 해 파생 류 의 기본 구성원 만 방문 할 수 있 고 파생 류 가 증가 하 는 구성원 은 방문 할 수 없다.그래서 pt->display()는 파생 클래스 Graduate 대상 에 추 가 된 display 함수 가 아니 라 기본 클래스 의 display 함수 이기 때문에 대학원 grad 1 의 num,name,score 3 개의 데이터 만 출력 합 니 다.대학원 grad 1 의 pay 를 포인터 로 출력 하려 면 파생 대상 을 가리 키 는 포인터 변 수 를 따로 설정 하여 grad 1 을 가리 키 고 ptr->display()로 파생 대상 의 display 함 수 를 호출 할 수 있 습 니 다.불편 합 니 다.이 예 를 통 해 알 수 있 듯 이 기본 대상 을 가리 키 는 포인터 변수 로 하위 대상 을 가리 키 는 것 은 합 법 적 이 고 안전 하 며 컴 파일 상의 오류 가 발생 하지 않 습 니 다.그러나 응용 에 있어 서 사람들의 희망 을 완전히 만족 시 키 지 못 하고 사람들 은 가끔 기본 지침 을 사용 하여 기본 클래스 와 하위 대상 의 구성원 을 호출 할 수 있 기 를 원한 다.우 리 는 다음 에 이 문 제 를 해결 할 것 이다.방법 은 허 함수 와 다 형 성 을 사용 하 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C++기본 포인터 와 하위 포인터 가 서로 값 을 부여 하 는 실현 방법다음은 하위 fish 지침 이 기본 동물 지침 에 부여 되 었 을 때 메모리 의 변 화 를 살 펴 보 겠 습 니 다.우리 가 fish 류 의 대상 을 구성 할 때 먼저 animal 류 의 구조 함 수 를 호출 하여 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.