C++다 중 및 가상 함수 상세 분석
C+다 태 는 구성원 함 수 를 호출 할 때 호출 함수 의 대상 유형 에 따라 서로 다른 함 수 를 실행 한 다 는 것 을 의미한다.
아래 의 실례 에서 기류 Shape 는 두 종류 로 파생 되 었 는데 다음 과 같다.
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
Triangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Triangle class area :" <<endl;
return (width * height / 2);
}
};
//
int main( )
{
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);
//
shape = &rec;
// area
shape->area();
//
shape = &tri;
// area
shape->area();
return 0;
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.Parent class area
Parent class area
오류 출력 을 초래 한 이 유 는 호출 함수 area()가 컴 파일 러 에 의 해 기본 버 전 으로 설정 되 었 기 때 문 입 니 다.이것 이 바로 정적 다 형 또는 정적 링크-함수 호출 은 프로그램 이 실행 되 기 전에 준비 되 었 습 니 다.때때로 이것 은 조기 귀속 이 라 고도 불 린 다.왜냐하면 area()함 수 는 프로그램 컴 파일 기간 에 이미 설정 되 어 있 기 때문이다.
그러나 지금 은 프로그램 을 약간 수정 합 니 다.Shape 류 에서 area()의 성명 전에 키워드 virtual 을 설치 합 니 다.다음 과 같 습 니 다.
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
virtual int area()
{
cout << "Parent class area :" <<endl;
return 0;
}
};
수정 후 앞의 인 스 턴 스 코드 를 컴 파일 하고 실행 할 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.Rectangle class area
Triangle class area
이때 컴 파일 러 는 포인터 의 내용 을 보 는 것 이지 유형 이 아니다.따라서 tri 와 rec 류 의 대상 주 소 는*shape 에 저장 되 어 있 기 때문에 각자 의 area()함 수 를 호출 합 니 다.
보시 다시 피 모든 하위 클래스 는 함수 area()의 독립 적 인 실현 이 있 습 니 다.이것 이 바로 다 태 적 인 일반적인 사용 방식 이다.다 중 모드 가 있 으 면 여러 개의 다른 클래스 가 있 을 수 있 습 니 다.모두 같은 이름 을 가지 고 있 지만 서로 다른 실현 함 수 를 가지 고 있 습 니 다.함수 의 매개 변 수 는 심지어 같 을 수 있 습 니 다.
가상 함수
가상 함 수 는 기본 클래스 에서 키워드 virtual 성명 을 사용 하 는 함수 입 니 다.파생 클래스 에서 기본 클래스 에서 정의 하 는 가상 함 수 를 다시 정의 할 때 컴 파일 러 에 정적 으로 이 함수 에 연결 하지 말 라 고 알려 줍 니 다.
우리 가 원 하 는 것 은 프로그램 에서 호출 된 대상 유형 에 따라 호출 된 함 수 를 선택 할 수 있 는 것 입 니 다.이러한 조작 은 동적 링크 나 후기 바 인 딩 이 라 고 합 니 다.
순 허 함수
파생 클래스 에서 이 함 수 를 대상 에 게 더 잘 적용 할 수 있 도록 기본 클래스 에서 가상 함 수 를 정의 하려 고 할 수 있 습 니 다.그러나 기본 클래스 에 서 는 가상 함수 에 의미 있 는 실현 을 할 수 없습니다.이 럴 때 는 순수 가상 함 수 를 사용 합 니 다.
우 리 는 기본 클래스 의 가상 함수 area()를 다음 과 같이 바 꿀 수 있 습 니 다.
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
// pure virtual function
virtual int area() = 0;
};
=0 컴 파일 러 에 게 함 수 는 주체 가 없고 위의 허 함 수 는 순 허 함수 라 고 알려 줍 니 다.이상 은 C++다 태 와 허 함수 의 상세 한 내용 을 상세 하 게 분석 하고 C++다 태 와 허 함수 에 관 한 자 료 는 우리 의 다른 관련 문장 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 원활 공사 & & 원활 공사 (차 트 법)모 성 은 도시 의 교통 상황 을 조사 하여 기 존의 도시 도로 통계 표를 얻 었 고 표 에는 모든 도로 가 직접 연 결 된 도시 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 도시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.