c++ this . const .
/***************************
this포인터
- 객체선언 시 멤버 변수만 각각 할당되며, 멤버 함수는 공유한다.
때문에 멤버 함수 호출 시 어떤 객체가 멤버 함수를 호출했는지 알 수 있도록
함수의 인자로 객체의 주소를 전달한다.
- 때문에 모든 클래스의 멤버 함수는 객체의 주소를 받을 수 있는 포인터를 인자로
가지고 있어야 하는데 이 포인터 변수를 this포인터라 한다.
- 즉, this포인터는 멤버 함수를 호출한 객체의 주소를 가리키는 포인터다.
***************************/
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
class MyClass
{
public:
void Set(int _i, int _j) //void Set(MyClass *this, int _i, int _j)
{
i = _i;
j = _j;
}
void Out() //void Out(MyClass *this)
{
cout << "i = " << i << ", j = " << j << endl;
}
private:
int i, j;
};
int main()
{
MyClass ob;
ob.Set(1, 10); //Set(&ob, 1, 10)
ob.Out(); //Out(&ob);
return 0;
}
-----------------------------------------------------------------------------------------------------
Date.h
-----------------------------------------------------------------------------------------------------
#ifndef _DATE_H_
#define _DATE_H_
class Date
{
public:
Date(int _y, int _m, int _d);
void OutDate() const;
int GetYear() const;
int GetMonth() const;
int GetDay() const;
private:
int year;
int month;
int day;
};
#endif
-----------------------------------------------------------------------------------------------------
Date.cpp
-----------------------------------------------------------------------------------------------------
#include<iostream>
#include"Date.h"
using std::cout;
using std::endl;
Date::Date(int _y, int _m, int _d):year(_y),month(_m),day(_d)
{
}
void Date::OutDate() const
{
cout<<year<<'/'<<month<<'/'<< day<<endl;
}
int Date::GetYear() const
{
return year;
}
int Date::GetMonth() const
{
return month;
}
int Date::GetDay() const
{
return day;
}
-----------------------------------------------------------------------------------------------------
main.cpp
-----------------------------------------------------------------------------------------------------
#include <iostream>
#include"date.h"
using std::cout;
using std::endl;
using std::cin;
void main()
{
Date d1(2007, 3, 5);
d1.OutDate();
cout << d1.GetYear() << '/' << d1.GetMonth() << '/' << d1.GetDay() << endl;
}