C++ this 포인터

진경천·2023년 9월 19일
0

C++

목록 보기
40/90

this

C++에서는 모든 멤버 함수가 자신만의 this 포인터를 가지고 있으며
this 포인터는 해당 멤버 함수를 호출한 객체를 가리키게 되며, 호출된 멤버 함수의 숨은 인수로 전달된다.
이렇게 함으로써 호출된 멤버 함수는 자신을 호출한 객체가 무엇인지 정확히 파악할 수 있게 되고 this 포인터로 변수 충돌을 피할수있다.

  • 예제
#include <iostream>

using namespace std;

class Person {
private:
	float weight;
	float height;

public:
	Person(float weight, float height)
		: weight(weight), height(height) {

	}

	void loseWeight(float weight) {
		this->weight -= weight;	// this를 안쓰면 loseWeight의 인자인 weight를 의미함
		if (this->weight < 0)
			this->weight = 0;
	}

	float getBMI() {
		return weight / ((height / 100) * (height / 100));
	}

	Person& complete(Person& person) {
		if (this->getBMI() < person.getBMI())
			return *this;
		else
			return person;
	}
};

int main() {
	Person person0(112.2, 162.7);
	Person person1(32, 173.7);
	cout << person0.getBMI() << endl;
	cout << person1.getBMI() << endl;
}
  • 코드 실행 결과

    42.3855
    10.606

this 포인터를 이용한 transaction builder

#include <iostream>

using namespace std;

struct Transaction {
	const int txID;
	const int fromID;
	const int toID;
	const int value;

	class Builder {
	private:
		int _fromID;
		int _toID;
		int _value;

	public:
		Transaction build() {
			int txID = _fromID ^ _toID ^ _value;
			return Transaction(txID, _fromID, _toID, _value);
		}

		Builder& setFromID(int fromID) {
			_fromID = fromID;
			return *this;
		}

		Builder& setToID(int toID) {
			_toID = toID;
			return *this;
		}

		Builder& setValue(int value) {
			_value = value;
			return *this;
		}
	};
};

int main() {
	
	Transaction tx = Transaction::Builder()
		.setFromID(1212)
		.setToID(4321)
		.setValue(4321)
		.build();
}
profile
어중이떠중이

0개의 댓글