10월, 2013의 게시물 표시

C++ : 연산자 오버로딩(8) - 객체의 저장을 위한 배열 클래스

참고 : 열혈강의 C++ 프로그래밍 책 #include <iostream> #include <cstdlib> using namespace std; class APoint { private: int x, y; public: APoint(int px = 0, int py = 0) : x(px), y(py) { } friend ostream& operator = arrlen) { cout = arrlen) { cout

C++ : 연산자 오버로딩(7) - 배열의 인덱스

참고 : 열혈강의 C++ 프로그래밍 책 #include <iostream> #include <cstdlib> using namespace std; class IntArray { private: int *arr; int arrlen; // 배열 클래스의 복사 생성자를 막기 위함 IntArray(const IntArray& arr) { } // 배열 클래스의 대입 연산자를 막기 위함 IntArray& operator=(const IntArray& arr) { } public: IntArray(int len) : arrlen(len) { arr = new int[len]; } int& operator[] (int idx) { if( idx = arrlen) { cout = arrlen) { cout

C++ : 이니셜라이저의 성능

참고 : 열혈강의 C++ 프로그래밍 책 이니셜라이저를 이용하면 선언과 동시에 초기화가 이뤄지는 형태로 바이너리 코드가 생성된다. 반대로 생성자의 몸체 부분에서 대입연산을 통해 초기화를 하면 선언과 초기화를 각각 진행하는 바이너리 코드가 생성된다. 성능에 상관이 없다면 두 가지 중 아무거나 써도 상관없지만 미세하더라도 성능이 중요하다면 이니셜라이저를 이용하는 것이 좋을 것 같다.

C++ : 연산자 오버로딩(6) - 상속 구조에서의 대입 연산자

참고 : 열혈강의 C++ 프로그래밍 책 #include <iostream> using namespace std; class Parent { private: int num1, num2; public: Parent(int n1 = 0, int n2 =0) : num1(n1), num2(n2) { } void ShowData() { cout

C++ : 연산자 오버로딩(5) - 대입 연산자 오버로딩의 중요성

참고 : 열혈강의 C++ 프로그래밍 책 기본적으로 복사 생성자 특성 1. 정의하지 않으며 디폴트 복사 생성자가 삽입된다. 2. 디폴트 복사 생성자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다 3. 생성자 내에서 동적 할당을 한다면, 그리고 깊은 복사가 필요하다면 직접 정의해야 한다. // 복사 생성자 void main() { Class c1(1, 2); Class c2 = c1; } 대입 연산자 특성 1. 정의하지 않으면 디폴트 대입 연산자가 삽입된다. 2. 디폴트 대입 연산자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다. 3. 연산자 내에서 동적 할당을 한다면, 그리고 깊은 복사가 필요하다면 직접 정의해야 한다. // 대입 연산자 void main) { Class c1(1, 2); Class c2(3, 4); c2 = c1; }; 대입 연산자를 이용하면서 동적할당을 한다면 주의할 점이 있다. #include <iostream> using namespace std; class Person { private: char* name; int age; public: Person(char* myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy(name, myname); age = myage; } void ShowPersonInfo() const { cout << "이름 : " << name << endl; cout << "나이 : " << age << endl; } Person& operator=(const Person& ref) { // 생성자에 동적 할당한 것을 해제해야 메모리 누수를 방지한다. delete []name; int len ...

C++ : 연산자 오버로딩(4) - 전위증가, 후위증가

참고 : 열혈강의 C++ 프로그래밍 책 #include using namespace std; class OperPoint3 { private: int x, y; public: OperPoint3(int px = 0, int py = 0) : x(px), y(py) { } void ShowPosition() const { cout << '[' << x << ", " << y << ']' << endl; } // 전위 증가 OperPoint3& operator++() { x += 1; y += 1; } // 후위 증가 // 후위 연산자만 const 반환형인 이유는 // C++연산 특성과 똑같이 해서 (pos++)++; 사용시 컴파일 에러를 유발하기 위함 const OperPoint3 operator++(int) { // const Point retobj(*this) 와 같다. const OperPoint3 retobj(x, y); x += 1; y += 1; return retobj; } friend OperPoint3& operator--(OperPoint3 &ref); friend const OperPoint3 operator--(OperPoint3 &ref, int); }; // 전위 감소 OperPoint3& operator--(OperPoint3 &ref) { ref.x -= 1; ref.y -= 1; return ref; } // 후위 감소 // 후위 연산자만 const 반환형인 이유는 // C++연산 특성과 똑같이 해서 (pos++)++; 사용시 컴파일 에러를 유발하기 위함 const OperPoint3 operator--(OperPoint3 &ref, int) { const OperPoint3 ...

C++ : 연산자 오버로딩(3) - 단항 연산자(증가, 감소 연산자의 오버로딩)

참고 : 열혈강의 C++ 프로그래밍 책 #include <iostream> using namespace std; class OperPoint2 { private: int x, y; public: OperPoint2(int px = 0, int py = 0) : x(px), y(py) { } void ShowPosition() const { cout

C++ : 연산자 오버로딩(2) - 가능한 연산자

참고 : 열혈강의 C++ 프로그래밍 책 멤버함수 기반으로만 오버로딩이 가능한 연산자 =    대입 연산자 ()   함수 호출 연산자 []   배열 접근 연산자(인덱스 연산자) ->  멤버 접근을 위한 포인터 ++   증가 연산자 --   감소 연산자 +    더하기 -    빼기 *    곱하기 /    나누기 << cout에서 사용하는 것과 같음 >> cin에서 사용하는 것과 같음 연산자 주의사항  1. 매개변수의 디폴트 값 설정이 불가능하다 // 매개변수에 디폴트 값 설정 안됨 void operator-(const int a = 0) { cout << xpos - a << endl; }

C++ : 연산자 오버로딩(1) - 기본

참고 : 열혈강의 C++ 프로그래밍 책 #include <iostream> using namespace std; class OperPoint { private: int xpos, ypos; public: OperPoint(int x = 0, int y = 0) : xpos(x), ypos(y) { } void ShowPosition() const { cout

C++ : 부동 소수점 실수 지원

출처 : 책 세 가지 크기의 부동 소수점 실수 지원 1.      float 키워드로 나타내는 단일 정밀도 (single precision) 2.      double 키워드로 나타내는 2 배 정밀도 (double precision) 3.      두 개의 키워드인 long double 로 나타내는 확장 정밀도 (extended precision)

google Blogger Syntax Highlighting

참조 사이트 1.  http://www.stylifyyourblog.com/2012/07/syntax-highlighting-in-blogger-using.html  - Syntax Highlighting 2.  http://www.tools.stylifyyourblog.com/p/postify.html  - 데모 동영상에서 나오는 HTML 변환하는 사이트 위 블로그에 google Blogger의 소스코드를 깔끔하게 볼 수 있도록 동영상과 설명을 정리해놨다. 블로그 내용대로 적용 후 글을 쓸 때 HTML 모드에서 다음과 같이 입력하면 된다. // linenums를 빼면 줄 번호가 없어진다. <pre class="prettyprint linenums"> // 소스 코드 #include <windows.h> #pragma comment // </pre> 위 내용을 적용하면 다음과 같다. // 소스 코드 #include <windows.h> #pragma comment (lib, "sample.lib") // < 와 > 는 2번 사이트를 활용해서 변환해야 정확하게 표현된다.