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();
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.