C 언어 모드 는 C++계승 과 다 중 인 스 턴 스 코드 를 실현 합 니 다.

이 문 제 는 주로 C 와 C++의 차이,그리고 C++에서 계승 과 다 형 개념 을 고찰 한다.
C 와 C++의 차이
C 언어 는 과정 을 향 한 언어 이 고 C++는 대상 을 향 한 과정 이다.
무엇이 대상 과 과정 을 대상 으로 하 는 것 입 니까?
과정 을 대상 으로 하 는 것 은 문 제 를 해결 하 는 절 차 를 분석 한 다음 에 함수 로 이런 절 차 를 한 걸음 한 걸음 실현 하고 사용 할 때 일일이 호출 하면 된다.과정 에 대한 분석 을 중시 하 는 것 이다.대상 을 대상 으로 하 는 것 은 문 제 를 구성 하 는 일 을 각 대상 으로 나 누 는 것 이다.대상 을 구축 하 는 목적 도 이 절 차 를 완성 하 는 것 이 아니 라 각 문제 가 해결 하 는 과정 에서 발생 하 는 행 위 를 묘사 하 는 것 이다.
대상 지향 과 과정 지향 의 차이?
4.567917.과정 을 대상 으로 하 는 디자인 방법 은 함수 로 데이터 의 조작 을 묘사 하지만 함수 와 작업 의 데 이 터 를 분리 합 니 다4.567917.대상 을 대상 으로 하 는 디자인 방법 은 대상 과 데 이 터 를 포장 하여 하나의 전체 가 되 는 것 이다4.567917.과정 을 대상 으로 디자인 절 차 를 과정 으로 하고 후기 에 유지 하기 어렵다4.567917.대상 을 대상 으로 디자인 한 데 이 터 를 중심 으로 데이터 가 상대 적 으로 기능 적 으로 비교적 강 한 안정성 을 가지 고 유지 하기 쉽다대상 지향 3 대 특징
패키지:
패 키 징 에 있어 데이터 와 구체 적 인 조작 이 실 현 된 코드 는 모두 특정한 대상 의 내부 에 두 고 이런 코드 의 구체 적 인 세부 사항 이 외부 에 발견 되 지 않 고 일부 인 터 페 이 스 를 남 겨 외부 에서 사용 하도록 하 는 것 이지 그 어떠한 형식 으로 도 대상 내부 의 실현 을 할 수 없다.패 키 징 을 사용 하면 구체 적 으로 실 현 된 디 테 일 을 숨 길 수 있 고 코드 를 쉽게 유지 하고 시스템 의 안전성 을 확보 할 수 있 습 니 다.
계승:
계승 체 제 는 대상 프로 그래 밍 을 대상 으로 코드 를 재 활용 하 는 가장 중요 한 수단 으로 프로그래머 가 기 존의 특성 을 확보 하 는 토대 에서 확장 하여 기능 을 증가 하도록 허용 한다.이렇게 새로 생 긴 종 류 는 파생 류 라 고 불 리 며 계승 은 대상 체 제 를 대상 으로 하 는 차원 구 조 를 나 타 낼 수 있다.
다 중:
다 태 적 으로 간단하게 말 하면'하나의 인터페이스,여러 가지 실현'이 고 같은 사물 이 나타 내 는 여러 가지 형태 이다.다 태 는 대상 을 대상 으로 하 는 언어 에서 인터페이스의 다양한 실현 방식 을 가리킨다.같은 인 터 페 이 스 를 재 활용 해 서로 다른 조작 을 하 는 것 이다.
C++다 중 태 는 두 가지 다 태 성 을 지원 하 며,컴 파일 할 때 다 태 성과 실행 할 때 다 태 성 을 지원 한다.컴 파일 시 다 태 는 과부하 함 수 를 통 해 이 루어 지 며,실행 시 다 태 는 가상 함 수 를 통 해 이 루어 집 니 다.정적 다 태:컴 파 일 러 는 컴 파 일 러 가 컴 파 일 러 기간 에 완성 되 고 컴 파 일 러 는 함수 실 삼 의 유형(암시 적 형식 으로 변 환 될 수 있 음)에 따라 어떤 함 수 를 호출 할 지 추측 할 수 있 으 며,대응 하 는 함수 가 있 으 면 상응하는 함 수 를 호출 하고,그렇지 않 으 면 컴 파 일 러 오 류 를 보고 할 수 있다.동적 다 형:함수 실행 기간(비 컴 파일 기간)에 인용 대상 의 실제 유형 을 판단 하고 실제 유형 에 따라 해당 하 는 방법 을 호출 합 니 다.가상 키워드 수식 류 의 구성원 함 수 를 사용 하여 이 함 수 를 가상 함수 로 가리 키 고 파생 류 는 다시 실현 해 야 하 며 컴 파일 러 는 동적 바 인 딩 을 실현 합 니 다.
동적 다 중 실현 조건:
1>,필드 사용:부모 클래스 의 지침 또는 부모 클래스 또는 하위 클래스 를 가리 키 는 대상 참조(할당 호 환 규칙 에 의 해 결정);
2>다 중 태 를 실현 하 는 두 가지 조건:허 함수 의 재 작성;부모 클래스 의 포인터 나 재 작성 한 가상 함 수 를 참조 합 니 다.
3>,부모 클래스 의 구성원 함수 에 virtual 키 워드 를 추가 하면 하위 클래스 에서 재 작성 한 이 함수 의 기본 virtual 은 지정 하지 않 아 도 되 지만 일반적으로 추가 합 니 다.
다시 쓰기:하위 클래스 는 부모 클래스 의 가상 함 수 를 다시 쓰 고 함수 이름,함수 매개 변 수 를 요구 하 며 반환 값 이 똑 같 습 니 다(협 변 제외).
전체적으로 말 하면 패 키 징 은 세부 사항 을 숨 길 수 있 고 개인 구성원 을 포함 하여 코드 모듈 에 안전 지 수 를 증가 시 킬 수 있다.계승 은 이미 존재 하 는 모듈 을 확장 할 수 있 습 니 다.코드 의 재 활용 성 을 높이 기 위해 서 입 니 다.다 태 는 클래스 가 계승 과 파생 할 때 클래스 의 실례 가 정확하게 호출 되 는 것 을 확보 하기 위해 인터페이스의 중용 을 실현 했다
C 시 뮬 레이 션 다 중 구현
C++의 다 중 모드
우리 가 알 고 있 는 것 은 C++에서 가상 함수 표를 유지 할 것 입 니 다.할당 호 환 규칙 에 따라 부모 클래스 의 지침 이나 인용 이 하위 클래스 대상 을 가리 킬 수 있다 는 것 을 알 고 있 습 니 다.부모 클래스 의 지침 이나 부모 클래스 를 호출 하 는 가상 함 수 를 참조 하면 이 부모 클래스 의 지침 은 자신의 가상 함 수 표 에서 자신의 함수 주 소 를 찾 습 니 다.만약 에 이 부모 클래스 대상 의 지침 이나 참조 가 하위 클래스 의 대상 이 고 이 하위 클래스 가 부모 클래스 의 가상 함 수 를 다시 썼 다 면 이 지침 은 하위 클래스 의 재 작성 한 가상 함 수 를 호출 합 니 다.

//c++    

class A
{
public:
  virtual void fun()//     
  {
    cout << "Base A::fun() " << endl;
  }
};

class B:public A
{
public:
  virtual void fun()//     ,   virtual       
  {
    cout << "Derived B::fun() " << endl;
  }
};

void Test1()
{
  A a;//    
  B b;//     

  A* pa = &a;//          
  pa->fun();//       

  pa = &b; //          ,    
  pa->fun();//         
}


c 언어 구현 다 형
우 리 는 C 언어 에서 class 류 라 는 개념 이 없다 는 것 을 알 고 있 지만 struct 구조 체 가 있 기 때문에 우 리 는 struct 를 사용 하여 모 의 하 는 것 을 고려 할 수 있다.그러나 C 언어의 구조 체 내부 에는 구성원 함수 가 없다.만약 에 이 부모 구조 체 와 서브 구조 체 가 공유 하 는 함 수 를 실현 한다 면?우 리 는 함수 지침 을 사용 하여 시 뮬 레이 션 하 는 것 을 고려 할 수 있다.그러나 이렇게 처리 하 는 데 한 가지 결함 이 존재 한다.바로 부자 각자 의 함수 포인터 사이 에 가리 키 는 것 은 C++에서 유지 하 는 가상 함 수 표 가 아니 라 물리 적 메모리 이다.시 뮬 레이 션 함수 가 너무 많 으 면 유지 하기 가 쉽 지 않다 는 것 이다.

//C    ,      

typedef void(*FUN)();//           

//  
struct Base 
{
  FUN _f;
};

//  
struct Derived
{
  Base _b;//                       
};


void FunB()
{
  printf("%s
", "Base::fun()"); } void FunD() { printf("%s
", "Derived::fun()"); } void Test2() { Base b;// Derived d;// b._f = FunB;// d._b._f = FunD;// Base *pb = &b;// pb->_f(); pb = (Base *)&d;// , pb->_f(); }

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기