2008. 8. 22. 15:42

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;
}