C++기본 포인터 와 하위 포인터 가 서로 값 을 부여 하 는 실현 방법
5409 단어 기본 클래스하위 클래스포인터값 을 부여 하 다
//==============================================================
// animal.h
//
// author : zwq
// describe: , ,
// 。
//==============================================================
#ifndef ANIMAL_H
#define ANIMAL_H
//===============================================================
//
// animal
//
//
//===============================================================
class animal
{
public:
void breathe(); //
};
//===============================================================
//
// animal
// ,
//
//===============================================================
class fish : public animal
{
public:
void breathe(); //
};
#endif
#include "StdAfx.h"
#include <iostream>
#include "Animal.h"
using namespace std;
//===============================================================
//
// animal
//
//
//===============================================================
void animal::breathe()
{
cout << "animal breathe" << endl;
}
//===============================================================
//
// animal
// ,
//
//===============================================================
void fish::breathe()
{
cout << "fish bubble" << endl;
}
기본 포인터 와 하위 포인터 간 의 상호 할당(1)하위 포인터 의 값 을 기본 포인터 에 할당 할 때 강제 형식 변환 이 필요 하지 않 으 며,C++컴 파 일 러 는 자동 으로 형식 변환 을 진행 합 니 다.하위 대상 도 기본 대상 이기 때문이다.
(2)하위 포인터 에 기본 포인터 값 을 부여 할 때 강제 형식 변환 이 필요 하 며,C++컴 파 일 러 는 자동 으로 형식 변환 을 하지 않 습 니 다.기본 대상 은 하위 대상 이 아니 기 때문이다.하위 대상 의 자체 증가 부분 은 기본 클래스 가 가지 고 있 지 않다.
다음 코드 를 실행 하여 어떤 오 류 를 보고 할 지 보십시오.
int main(int argc, char* argv[])
{
ExamAnimal();
return 0;
}
void ExamAnimal()
{
// , ,C++
// fish animal
animal* pAn;
fish* pfh = new fish;
pAn = pfh;
delete pfh;
pfh = NULL;
// , ,C++
// animal fish
fish* fh1;
animal* an1 = new animal;
//
fh1 = an1;
delete an1;
an1 = NULL;
}
컴 파일 할 때 다음 과 같은 오류 정 보 를 알려 줍 니 다.--------------------Configuration: CPlusPlusPrimer - Win32 Debug-------------------- Compiling... CPlusPlusPrimer.cpp E:\Study\example\CPlusPlusPrimer\CPlusPlusPrimer.cpp(94) : error C2440: '=' : cannot convert from 'class animal *' to 'class fish *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast Error executing cl.exe.
CPlusPlusPrimer.exe - 1 error(s), 0 warning(s)
상기 오 답 제시 정보 에 따라 코드 를 다음 과 같이 수정 합 니 다.
void ExamAnimal()
{
// , ,C++
// fish animal
animal* pAn;
fish* pfh = new fish;
pAn = pfh;
delete pfh;
pfh = NULL;
// , ,C++
// animal fish
fish* fh1;
animal* an1 = new animal;
// :
//
fh1 = (fish*)an1;
delete an1;
an1 = NULL;
}
재 컴 파일,통과.2.하위 포인터 가 기본 포인터 에 부여 할 때 메모리 분석
(1)int 변 수 는 char 변 수 를 부여 합 니 다.
정형 int 가 char 형식 으로 바 뀌 었 을 때 한 바이트 의 내용 만 char 형식 에 넣 을 수 있 고 나머지 세 바이트 의 내용 은 놓 을 수 없 으 며 잘 리 고 정밀도 가 없습니다.두 변수 나 대상 이 전환 할 때 반드시 두 개의 메모리 모델 이 서로 일치 하 는 지 봐 야 한다.
(2)하위 fish 지침 은 기본 동물 지침 에 부여 한다.
다음은 하위 fish 지침 이 기본 동물 지침 에 부여 되 었 을 때 메모리 의 변 화 를 살 펴 보 겠 습 니 다.우리 가 fish 류 의 대상 을 구성 할 때 먼저 animal 류 의 구조 함 수 를 호출 하여 animal 류 의 구조 함 수 를 구성 한 다음 에 fish 류 의 구조 함 수 를 호출 하여 자신의 부분의 구 조 를 완성 하여 완전한 fish 대상 을 연결 해 야 합 니 다.우리 가 fish 류 대상 을 animal 류 대상 으로 바 꿀 때 이 대상 은 원래 대상 의 전체 메모리 모델 의 상반부,즉 그림 속 animal 대상 의 메모리 부분 으로 여 겨 진다.우리 가 형식 변환 후의 대상 지침 을 이용 하여 그것 을 호출 하 는 방법 은 당연히 그것 이 있 는 메모리 에 있 는 방법 을 호출 하 는 것 이다.여기 서 animal 류 대상 은 char 유형의 대상 과 유사 하고 fish 류 대상 은 int 유형의 대상 과 유사 하 며 fish 류 대상 을 animal 류 대상 에 게 부여 할 때 fish 류 대상 자체 의 부분 을 잘라 내 고 fish 류 대상 중의 animal 부분 을 남긴다.
(3)기본 동물 지침 은 하위 fish 지침 에 부여 한다.
기본 적 인 animal 대상 에 포 함 된 정보 가 적 고 fish 대상 에 포 함 된 정보 가 많 으 며 정보 가 적은 대상 을 정보 가 많은 대상 으로 직접 전환 할 때(강제 유형 전환 이 없 음)많은 정 보 를 구성 할 수 없 음 이 분명 하 다.컴 파일 할 때 다음 과 같은 오류 가 발생 할 수 있 습 니 다:error C2440:'=':cannot convert from'class animal*'to'class fish*'.이 때 강제 형식 변환 이 필요 합 니 다.
// , ,C++
// animal fish
fish* fh1;
animal* an1 = new animal;
//
fh1 = (fish*)an1;
이상 은 여러분 에 게 가 져 온 C++기본 포인터 와 하위 포인터 가 서로 값 을 부여 하 는 실현 방법 에 대한 모든 내용 입 니 다.많은 응원 부 탁 드 리 겠 습 니 다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C++기본 포인터 와 하위 포인터 가 서로 값 을 부여 하 는 실현 방법다음은 하위 fish 지침 이 기본 동물 지침 에 부여 되 었 을 때 메모리 의 변 화 를 살 펴 보 겠 습 니 다.우리 가 fish 류 의 대상 을 구성 할 때 먼저 animal 류 의 구조 함 수 를 호출 하여 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.