C++클래스 의 기본 구성원 함수 6 개 상세 설명

간단 한 이야기
먼저"this 지침"을 말씀 드 리 겠 습 니 다.
C++에서 this 지침 을 도입 하여 이 문 제 를 해결 합 니 다.그리고 C+컴 파일 러 는 모든'비정 상 멤버 함수'에 숨겨 진 지침 파 라 메 터 를 추가 하여 이 지침 이 현재 대상(함수 가 실 행 될 때 이 함수 의 대상 을 호출 합 니 다)을 가리 키 게 합 니 다.함수 체 에서 모든 구성원 변 수 는 이 지침 을 통 해 접근 합 니 다.다만 모든 조작 은 사용자 에 게 투명 합 니 다.그리고 사용 자 는 전달 할 필요 가 없고 컴 파일 러 가 자동 으로 완성 된다.
컴 파일 러 가 프로그램 을 만 들 때 대상 의 첫 주 소 를 가 져 오 는 정 보 를 이렇게 많이 말 했다.그 다음 에 가 져 온 대상 의 첫 주 소 를 레지스터 에 저장 하고 구성원 함수 의 다른 매개 변 수 는 모두 스 택 에 저장 합 니 다.this 포인터 인 자 는 레지스터 에 저 장 됩 니 다.클래스 의 정적 구성원 함수(static 로 장 식 된 구성원 함수)는 this 포인터 라 는 인자 가 없 기 때문에 클래스 의 정적 구성원 함수 도 클래스 의 비정 상 구성원 변 수 를 호출 할 수 없습니다.
구조 함수
구조 함 수 는 특수 한 구성원 함수 로 이름 이 클래스 이름과 같 고 반환 값 이 있 을 수 없습니다.클래스 유형 을 만 들 때 컴 파일 러 가 자동 으로 호출 되 고 대상 의 수명 주기 에 한 번 만 호출 됩 니 다.**주요 임 무 는 대상 을 초기 화 하 는 것 이다.
↓다음은 간단 한 구조 함수(전 결 성)입 니 다.

주 함수 초기 화 시 인삼 이 없 으 면 결 성 값 0 으로 구성원 변수 에 값 을 부여 합 니 다.
기본 구조 함수:



Q:왜 위의 오류 가 발생 했 습 니까?-여러 개의 기본 구조 함 수 를 포함 합 니까?
A:인삼 이 없 는 구조 함수 와 전체 결 성 된 구조 함 수 는 모두 기본 구조 함수 라 고 부 르 고 기본 구조 함 수 는 하나만 있 을 수 있 습 니 다.메모:구조 함수 가 없고 구조 함수 가 모두 부족 합 니 다.우 리 는 컴 파일 러 가 기본적으로 생 성 된 구조 함 수 를 쓰 지 않 았 습 니 다.모두 기본 구조 함수 라 고 할 수 있 습 니 다.
특징:
1.함수 이름과 클래스 이름 이 같 음;
2.반환 값 없 음;
3.대상 이 예화 되 었 을 때 컴 파일 러 는 해당 하 는 구조 함 수 를 자동 으로 호출 합 니 다.
4.구조 함 수 는 다시 불 러 올 수 있다.
분석 함수
석조 함수:구조 함수 기능 과 반대로 석조 함 수 는 완성 대상 의 소각 이 고 국부 대상 의 소각 작업 은 컴 파 일 러 에 의 해 이 루어 진다.대상 은 소각 할 때 자동 으로 석조 함 수 를 호출 하여 클래스 의 일부 자원 청 소 를 완성 합 니 다.구조 함수 와 마찬가지 로 우리 가 석조 함 수 를 쓰 지 않 으 면 시스템 은 기본 석조 함 수 를 생 성 하지만 이 석조 함 수 는 아무것도 하지 않 습 니 다.
만약 에 클래스 의 구성원 변수 가 동적 으로 메모리 공간 을 열 필요 가 없다 면 기본 분석 함 수 는 분석 임 무 를 완성 할 수 있 습 니 다.예 를 들 어 아래 와 같은 것 은 분석 하지 않 아 도 된다 고 할 수 있 습 니 다.

그러나 아래 와 같이 기본 분석 함 수 는 이미 완성 할 수 없다.

특징:
1.함수 명 은 클래스 이름 앞 에 문 자 를 붙 입 니 다~;
2.인자 가 없 음(숨겨 진 인자*this 포인터 가 있 음)반환 값 이 없 음;
3.하나의 클래스 가 있 고 하나의 석조 함수 만 있 습 니 다.정 의 를 표시 하지 않 으 면 시스템 은 기본 석조 함 수 를 자동 으로 생 성 합 니 다.
4.대상 수명 주기 가 끝 날 때 C+컴 파일 시스템 은 분석 함 수 를 자동 으로 호출 합 니 다.
복사 구조 함수
복사 구조 함수:하나의 형 삼 만 있 습 니 다.이 형 삼 은 본 유형의 대상 에 대한 참조(일반적으로 const 수식)입 니 다.존재 하 는 클래스 대상 으로 새 대상 을 만 들 때 컴 파일 러 에서 자동 으로 호출 됩 니 다.

위의 그림 에서 보 듯 이 t2 변 수 를 초기 화 할 때 구조 함 수 를 호출 하 는 것 이 아 닙 니 다.
아래 의 이 그림 은 위의 문 제 를 설명 할 수 있 을 것 이다.

복사 구조 함수 파라미터 에 대한 설명:

물론 구조 함수 와 마찬가지 로 정 의 를 표시 하지 않 으 면 시스템 은 기본 복사 구조 함 수 를 생 성 합 니 다.기본 복사 구조 함수 대상 은 메모리 저장 소 에 따라 바이트 순 으로 복사 하고 얕 은 복사 또는 값 복사 가 완 료 됩 니 다.
특징:
1.복사 구조 함 수 는 구조 함수 의 과부하 형식 이다.
2.구조 함 수 를 복사 하 는 매개 변 수 는 하나(물론 숨겨 진*this 가 있 습 니 다)이 고 인용 전 삼 을 사용 해 야 합 니 다.전송 방식 을 사용 하면 재 귀 를 유발 할 수 있 습 니 다.
할당 리 로드 함수
할당 리 셋 함수:C++코드 의 가 독성 을 강화 하기 위해 연산 자 리 셋 을 도 입 했 습 니 다.연산 자 리 셋 은 특수 함수 이름 을 가 진 함수 이 고 반환 값 유형,함수 이름 과 매개 변수 목록 도 있 습 니 다.반환 값 유형 은 일반 함수 와 유사 합 니 다.
**함수 이름 은:**키워드 operator 뒤에 다시 불 러 올 연산 자 기 호 를 연결 합 니 다.
함수 원형:반환 값 형식 operator 연산 자(매개 변수 목록)
Test& operator= (const Test& t)




주의:
다른 기 호 를 연결 해서 새로운 조작 자 를 만 들 수 없습니다.예 를 들 어 operator@;
다시 불 러 오 는 조작 자 는 하나의 유형 이나 매 거 진 형식의 조작 수가 있어 야 합 니 다.
내 장 된 유형의 조작 부호 에 사용 되 는 조작 부 호 는 그 의 미 를 바 꿀 수 없다.예 를 들 어 내 장 된 정형+는 그 의 미 를 바 꿀 수 없다.
클래스 구성원 의 과부하 함수 로 서 그 형 삼 은 조작 숫자 항목 보다 1 구성원 함수 가 적은 것 처럼 보이 고 조작 부 호 는 기본 적 인 형 삼 this 가 있 으 며 첫 번 째 형 삼 으로 한정 되 어 있 습 니 다.
*、::、sizeof、?:、. 이상 5 개의 연산 자 는 다시 불 러 올 수 없습니다.
정 의 된 할당 연산 자 를 표시 하지 않 으 면 컴 파일 러 도 생 성 되 고 대상 이 바이트 순 으로 값 을 복사 합 니 다.
const 멤버 함수
const 수식 클래스 구성원 함 수 를 const 구성원 함수,const 수식 클래스 구성원 함수 라 고 부 르 며,실제 적 으로 이 구성원 함수 에 포 함 된 this 지침 을 수식 하여 이 구성원 함수 에서 클래스 의 모든 구성원 을 수정 할 수 없 음 을 나타 낸다.

multable 키워드:수정 해 야 할 구성원 변수 가 있 을 때 구성원 변수 성명 전에 이 키 워드 를 추가 해 야 합 니 다.제때에 const 구성원 함수 도 수정 할 수 있 습 니 다.
주소 및 const 주소 재 부팅 함수
이 두 기본 구성원 함 수 는 일반적으로 다시 정의 하지 않 고 컴 파일 러 는 기본적으로 생 성 됩 니 다.

class Date
{
public:
	Date* operator&()
	{
		return this;
	}
	//     const      ,        const  
	const Date* operator&() const
	{
		return this;
	}
private:
	int _year;
	int _month;
	int _day;
};
깊이 파다
 구조 함수

위의 코드 가 정상적으로 실행 되 고 할당 에 성공 한 이 유 는 무엇 입 니까?실제 컴 파일 러 는 할당 문 구 를 실행 하기 전에'100 을 매개 변수 로 이름 없 는 임시 클래스'를 만 든 다음 에 할당 합 니 다.

위의 이런 상황 을 우 리 는**'암시 적 전환'*라 고 부른다.
explicit 키워드:구조 함수 에 이 키 워드 를 추가 하면 변환 을 표시 해 야 합 니 다.암시 적 변환 을 할 수 없습니다.

그래서 우 리 는 강 전 된 후에 값 을 부여 합 니 다.

우 리 는 사고방식 을 바 꾸 어'클래스'를 정형 에 값 을 부여 하고 먼저 강전 함 수 를 제시한다.

마지막 으로 다른 초기 화 방식 을 소개 합 니 다.

복수 클래스 를 제시 합 니 다.매개 변수 목록 초기 화 효율 은 첫 번 째 초기 화 방식 보다 높 습 니 다.
복사 구조 함수
다음은 딥 복사 본 을 소개 합 니 다.먼저 다음 코드 를 보 겠 습 니 다.

이 코드 에서 우 리 는 복사 구조 함 수 를 쓰 지 않 았 는데 기본 복사 함수 에 문제 가 생 겼 음 을 알 수 있 습 니 다.앞에서 말 했 듯 이 기본 복사 방식 은 얕 은 복사,즉 값 복사 이다.
위의 s1 은 hello 초기 화 를 사용 하고 s2 는 s1 의 값 을 사용 하여 복사 하기 때문에 s2 는 새로운 공간 을 개척 하지 않 고 s1 의 공간 을 가리 키 기 때문에 마지막 으로 석조 함 수 를 호출 할 때 같은 공간 에 대해 두 번 무료 로 사용 했다.
코드 를 아래 와 같은 것 으로 바 꾸 면 잘못 보고 하지 않 을 것 이다.

할당 연산 자 과부하 함수
여기 서 우 리 는 위의 구조 함수 부분 에서 마지막 으로 제시 한 복수 류 를 계속 인용 합 니 다.

우 리 는 위 에서 할당 과부하 함 수 를 말 했 습 니 다.그렇다면 도대체 할당 연산 자 를 다시 불 러 오 는 것 은 무엇 입 니까?
연산 자 과부하:연산 자 에 게 새로운 의 미 를 부여↓↓↓

위의 그림 에서 알 수 있 듯 이 위의 덧셈 연산 자 기호 인'+'의 과부하 함 수 는 구성원 함수 입 니 다.매개 변수 안에 숨겨 진 this 지침 이 있 기 때문에 대상 으로 이동 해 야 합 니 다.

위의 코드 의 전체적인 사고방식 은 다음 과 같다.
1.4 차 구조 함수,구조 C1C2C 3 및 operator+내부 tmp 를 호출 합 니 다.
2.C1 은 덧셈 리 로드 함 수 를 호출 하여 C1+C2 를 진행 합 니 다.
3.덧셈 리 로드 함수 가 되 돌아 올 때 복사 구조 함수(tmp 를 임시 대상 으로 복사)를 한 번 이동 해 야 합 니 다.
4.할당 을 호출 하여 C 1+C2 의 값 을 다시 불 러 옵 니 다.

쓰 는 클래스 가 어떤 연산 을 하려 고 할 때 컴 파일 러 는 지원 되 지 않 기 때문에 연산 자 를 다시 불 러 와 야 합 니 다.
총결산
C++클래스 의 기본 멤버 함수 6 개 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 C++클래스 멤버 함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기