본문 바로가기

프로그래밍/C++34

멤버 이니셜 라이저(member initializer) 클래스 맴버 변수 안에 들어가 있는 const 변수를 초기화 하기 위해선 어떻게 해야 할까? 실제 const int n 이라는 변수를 초기화 하기 위해선. const int n = 10;​ 과 같이 해야 하지만 클래스에서 class AAA { const int n = 10; }; 같은 선언 따위는 해줄 수 없다. 그렇다면 어떤 식으로 해주어야 하는가, 그렇다고 상수화 되어 있는 멤버 변수를 다음 처럼 접근 할 수도 없다. #include class AAA { const int n; public: AAA( int n ) { this->n = n; // 상수화 되어 있는 멤버 변수이기 때문에 접근이 불가능하다. } }; void main() { AAA a(10); }​ 그렇다면 어떻게 해 주어야 하는가. #.. 2010. 3. 23.
복사 생성자, 디폴트 생성자 그리고 디폴트 복사 생성자. 복사 생성자, 디폴트 생성자, 디폴트 복사 생성자, 그리고 디폴트 소멸자까지 쭈욱~ 둘러 보자. 사실 다 따로따로 포스팅 할까 하다가 아무리 봐도 한번에 설명하는게 좀더 나을것 같다는 생각이 든다. 자 일단 쉬운것 부터 디폴트 생성자, 디폴트 소멸자 class를 생성할 때에 우리는 소멸자를 만들 수도 만들지 않을 수도 생성자를 만들 수도 만들지 않을 수도 있다. 이것은 당연한 것이다. 하지만 컴파일러는 만들지 않으면 기본적으로 만들어 준다. 그게 중요하다는 거다. #include class AAA { // 생성자 소멸자 선언을 해주든 안해주든 // 컴파일을 하면 다음과 같은 디폴트 생성자, 소멸자가 존재 한다고 보면 된다. // 물론 하는 일은 아무것도 없다. public: AAA(){ } ~AAA(){.. 2010. 3. 21.
friend private로 선언된 class 변수를 외부에서 조작 하기 위해 사용. #include class AAA { int n; public: // SetN이라는 함수에 대해서 friend 선언 friend void SetN( AAA& a, int n ); void PrintN() { std::cout 2010. 3. 21.
this 포인터 this 포인터, 자기 자신을 호출하는 포인터. 자기 참조 포인터라고도 하는데 크게 어려운건 없다. #include class AAA { int n; public: AAA(int n) { // 컴파일에 문제는 없지만 // 프로그래머가 원하는 결과는 나오지 않을 것이다. //n = n;// n은 class AAA의 n이 아닌 인자 n만을 가지고 값을 넣기 때문이다. // 다음처럼 해주면 된다. this->n = n; } AAA* GetThis() { return this; } }; void main() { AAA aaa(10); // this 포인터는 그 클래스의 주소값을 가르키고 있기 때문에 // 다음처럼 하면 aaa의 주소를 리턴하여 출력한다. std::cout 2010. 3. 21.
객체 포인터 배열 말이 어렵다. 객체... 포인터... 배열... 따로 봐도 어렵고 같이 봐도 어렵다 ㅎ 흔히 클래스를 만들고 main에 선언을 해주면 보통 객체화, 라고들 하는데 거기에 포인터가 붙고, 배열까지 따라 오니 손에 잡힐 듯 하면서도 흘러 내리는 느낌 하나씩 천천히 따라가 보자. #include #include class AAA { int n; public: AAA(int _n) { n = _n; std::cout 2010. 3. 21.
클래스의 활용 누가 그랬던가, C++로 제작이 가능한 모든것은 C로도 제작이 가능하다고, 물론 맞는 말이지만, 추후 그 프로그램을 수정할때의 시간은 확실히 차이가 난다고 생각한다. 클래스의 활용법에 대해서 알아보자. 클래스를 선언할 때에 public: private: protected: 가 존재 하지만 일반 적으로 public:에는 함수 선언을 많이 하고 private:에는 변수 선언을 많이 하게 된다. 왜 그럴까? 소스 코드를 보자. #include class AAA { // 기본적으로 아무 것도 설정해 주지 않으면 private: int n; public: int GetN();// N의 값을 return 받기 위해 void SetN(int tmp);// N에, 값을 넣기 위해 }; void main() { // 만.. 2010. 3. 20.