C++ 클래스에서this 포인터 설명
1. 설명: 프로그램에서 하나의 클래스가 여러 개의 대상을 정의하고 여러 개의 대상이 클래스에서 같은 구성원 함수를 호출할 때 이 구성원 함수가 어느 대상에서 작동하는지 어떻게 구별하는지, C++는this지침을 제공한다.예:
4
class Data
{
public:
void SetData(int year,int month,int day)
{
_year=year;
_month=month;
_day=day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Data d1,d2;
d1.SetData(2016,9,25);
d2.SetData(2016,9,25);
return 0;
}
두 개의 데이터 클래스 대상 d1, d2를 만들고 구성원 함수인 SetData() 함수를 호출합니다. 이 때 그 대상에서 작업하고this지침이 작용합니다.2. 정의: 모든 클래스의 구성원 함수는 기본적으로 하나의 포인터를 정의한다. 하나의 클래스 대상을 만들고 대상으로 구성원 함수를 호출할 때 이 포인터는 이 대상의 주소로 초기화되어 호출 함수의 대상을 가리키게 한다. 이 포인터는this포인터라고 부른다.즉, 상위 코드 Data 클래스의 구성원 함수인 SetData()는 클래스를 식별할 때 컴파일러가 다음과 같이 덮어씁니다.
void SetDate(Date* const this, int year, int month, int day)
{
this->_year = year;
this->_month = month;
this->_day = day;
}
상기에서 나타난this지침은 기본적으로 숨겨진 지침이다. 대상 d1이 호출되면this지침이 저장한 주소는 d1의 주소와 같기 때문에 서로 다른 상황에서 각각 d1, d2 두 개의 대상 주소를 가리킨다.이 구성원 함수 구현은 C 언어에서 구조체 구현과 동일합니다. 예를 들어 다음과 같습니다.
4
struct Date
{
int _year;
int _month;
int _day;
};
void SetDate(<span style="color:#ff0000;">Date* _this</span>, int year, int month, int day)
{
_this->_year = year;
_this->_month = month;
_this->_day = day;
}
int main()
{
Date d1;
SetDate(<span style="color:#ff0000;">&d1</span>, 2016, 9, 26);
return 0;
}
상기 코드로 구조체 대상 d1을 만들고 함수에 d1 주소를 전달한다.this 바늘이 수신되기 때문에 이 두 가지 실현 방법은 같다.위에서 정리한 this 포인터-
3. 특징:
(1) 유형: 클래스 유형*const(상수 지침),this 지침은 수정하고 값을 부여할 수 없습니다(클래스 대상 주소가 저장되어 있음).
(2)this지침은 은밀한 지침으로 표시될 수 없다. 이것은 클래스 구성원 함수의 첫 번째 기본적인 은밀한 매개 변수로 함수 내에서 은밀하게 이를 사용하여 본 클래스의 데이터 구성원과 구성원 함수에 접근할 수 있으며 컴파일러가 자동으로 유지보수하여 전달한다.
(3)this지침은 국부 변수로 국부 모든 대상은 어떠한 비정상적인 구성원 함수에서도 볼 수 있다.
(4)this지침은 대상이 구성원 함수를 호출할 때만 초기화되고 다시 방향을 정한다. 대상을 가리키며 구성원 함수에 은밀하게 전달되며 더 이상 수정할 수 없다.
(5)this지침은 대상의 일부분이 아니며sizeof 결과에 영향을 주지 않으며 그 작용역은 일반적으로 클래스 구성원 함수 내부에 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.