2013년 2월 27일 수요일

복사생성자, 대입연산자 호출 시점


복사 생성자가 호출되는 대표적인 상황
int main(void)
{
Point pos1(5,7);
Point pos2 = pos1;//pos2의 초기화에 기존에 생성된 객체 pos1 사용
.....
}

대입 연산자가 호출되는 대표적인 상황
int main(void)
{
Point pos1(5,7);
Point pos2(9,10);
pos2 = pos1;//pos2.operator=(pos1);
.....
}
pos2,pos1 모두 이미 생성 및 초기화가 진행된 객체라는 사실. 즉, 기존에 생성된 두 객체간의 대입연산 시에는 대입 연산자가 호출된다.

2013년 2월 25일 월요일

오버로딩이 불가능한 연산자의 종류


오버로딩이 불가능한 연산자의 종류

. 멤버 접근 연산자
_____________________________________

.* 멤버 포인터 연산자
_____________________________________

:: 범위 지졍 연산자
_____________________________________

?: 조건 연산자(3항 연산자)
_____________________________________

sizeof 바이트 단위 크기 계산
_____________________________________

typeid RTTI 관련 연산자
_____________________________________

static_cast 형변환 연산자
_____________________________________

dynamic_cast         형변환 연산자
_____________________________________

const_cast 형변환 연산자
_____________________________________

reinterpret_cast 형변환 연산자
_____________________________________

제한하는 이유는 C++의 문법규칙을 보존하기 위해서다.

2013년 2월 20일 수요일

const 객체와 const 객체들의 특성


  1. #include
  2. #include
  3.  
  4. using namespace std;
  5.  
  6. class SoSimple
  7. {
  8. private:
  9.     int num;
  10. public:
  11.     SoSimple(int n):num(n)
  12.     {
  13.  
  14.     }
  15.     SoSimple& AddNum(int n)
  16.     {
  17.         num += n;
  18.         return *this;
  19.     }
  20.     void ShowData() const
  21.     {
  22.         cout<<"num : "<
  23.     }
  24. };
  25.  
  26. void main()
  27. {
  28.     const SoSimple obj(7);//const 객체 생성
  29.     //obj.AddNum(20);//AddNum 은 const 함수가 아니기 때문에 호출 불가
  30.     obj.ShowData();//ShowData는 const 함수 이기때문에 const 객체를 대상으로 호출이 가능
  31.  
  32.     _getch();
  33. }
/*
const 객체와 const 객체들의 특성

변수의 상수화
const int num = 10;

겍체의 상수화
const SoSimple sim(20);
이 객체를 대상으로는 const 멤버함수만 호출이 가능, 데이터 변경 불가
*/
  1. #include
  2. #include
  3.  
  4. using namespace std;
  5.  
  6.  
  7. class SoSimple
  8. {
  9. private:
  10.     int num;
  11. public:
  12.     SoSimple(int n):num(n)
  13.     {
  14.  
  15.     }
  16.     SoSimple& AddNum(int n)
  17.     {
  18.         num += n;
  19.         return *this;
  20.     }
  21.     void SimpleFunc()
  22.     {
  23.         cout<<"SimpleFunc : "<
  24.     }
  25.  
  26.     void SimpleFunc() const
  27.     {
  28.         cout<<"const SimpleFunc"<
  29.     }
  30. };
  31.  
  32. void YourFunc(const SoSimple &obj)
  33. {
  34.     obj.SimpleFunc();
  35. }
  36.  
  37. void main()
  38. {
  39.     SoSimple obj1(2);
  40.     const SoSimple obj2(7);
  41.  
  42.     obj1.SimpleFunc();
  43.     obj2.SimpleFunc();
  44.  
  45.     YourFunc(obj1);
  46.     YourFunc(obj2);
  47.  
  48.     _getch();
  49. }
/*
const 선언유무도 함수 오버로딩 조건에 해당 된다.
void SimpleFunc() const
{
//값만 벼경되지 않는다면 const 가 아닌 변수에 접근도 가능하다.
cout<<"const SimpleFunc"<
}
*/

출처 열혈강의 C++