일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- c++
- vector
- Array
- arduino compiler
- WinAPI
- list
- html
- Deque
- LineTracer
- priority_queue
- 운영체제
- 아두이노 소스
- stl
- 자료구조
- set
- Visual Micro
- 라인트레이서
- 수광 소자
- queue
- 통계학
- 아두이노 컴파일러
- Algorithm
- 시스템프로그래밍
- 아두이노
- Stack
- 컴퓨터 그래픽스
- directx
- Arduino
- map
- C언어
- Today
- Total
목록Programming/Cplusplus (21)
Kim's Programming
정적 멤버 변수 정적 멤버 변수는 클래스의 바깥에 선언되어 있지만 클래스에 속하며 객체별로 할당되지 않고 모든 객체가 공유하는 멤버입니다. 개별 객체와는 직접적인 상관이 없고 객체 전체를 대표하는 클래스와 관련된 정보를 저장하는 좀 특수한 멤버입니다. 정의가 좀 복잡해 보이는데 이런 멤버 변수가 왜 필요한지 소스를 보면서 알아보겠습니다. 다음 소스는 count라는 이름의 클래스를 선언하여 사용하여 사용하는데 main에서 count형 객체가 몇 개나 생성되었는지 그 개수를 관리하고자 합니다. 12345678910111213141516171819202122232425262728#includeusing namespace std; int num = 0;class Count{private: int Value;pu..
정보 은폐 정보은폐란 사용자에게 클래스의 사용법만 알려주고 그 내부 구조는 알려주지 않는 것입니다. 실제 클래스 JpegImage클래스는 Jpeg 이미지 파일을 관리하는 클래스이며 이미즈를 관리하고 출력할 수 있는 기능들이 캡슐화되어 있습니다. 우선 JpegImage 클래스를 보겠습니다.123456789101112131415class JpegImage{private: BYTE *RawData; JPEGHEADER Header; void Decomp(); void Encomp(); public: Jpeg(); ~Jpeg(); BOOL Load(char *FileName); BOOL Save(char *FileName); void Draw(int x, int y);};cs손실 압출을 사용하는 Jpeg 파일의..
::레퍼런스 멤버 초기화 레퍼런스는 변수에 대한 별명이며 선언할 때 반드시 누구에 대한 별명인지를 밝혀야 합니다.단 예외적으로 함수의 형식 인수, 클래스의 멤버, extern 선언시는 대상체를 지정하지 않을 수 있는데 이때는 함수 호출시나 객체 생성시로 초기화가 연기됩니다. 레퍼런스 멤버를 가지는 클래스는 생성자에서 이 멤버를 초기화해야 하는데 다음 예제처럼 초기화 리스트를 사용합니다.1234567891011121314151617181920#define _CRT_SECURE_NO_WARNINGS#include#includeusing namespace std;class Some{public: int &ri; Some(int &i) :ri(i){} void OutValue() { cout
복사 생성자 복사 생성자는 지금까지의 것들 보다 난이도가 있습니다. 변수를 선언할 때 = 구분자 다음에 상수로 초기값을 지정할 수 있으며 이미 생성되어 있는 같은 타입의 다른 변수로도 초기화할 수 있습니다. 다음은 가장 간단한 타입인 정수형의 예입니다.12int a=4;int b=a;cs정수형 변수 a는 선언됨과 동시에 3으로 초기화되었습니다. 그리고 동일한 타입의 정수형 변수 b는 선언과 동시에 a로 초기화 되었습니다. 결국 두 변수는 모두 3의 값을 가지게 될 것입니다. 이런 초기화는 실수형이나 문자형, 구조체 등에 대해서도 똑같이 허용됩니다. 클래스가 int와 동일한 자격을 가지는 타입이 되기 위해서는 이미 생성되어 있는 같은 타입의 객체로부터 초기화될 수 있어야 합니다. 객체에 대해서도 이런 초기..
생성자/파괴자의 특징 클래스는 단순 타입보다 훨씬 더 복잡한 정보를 다룰 수 있기 떄문에 대입문 같은 간단한 형식으로는 초기화할 수 없습니다. 그래서 생성자라는 특별한 멤버 함수가 고유한 초기화를 수행하는데 초기화가 워낙 특수하기 떄문에 뒷처리하는 파괴자라는 것도 필요합니다. 생성자와 파괴자는 컴파일러에 의해 자동으로 호출되며 임무 자체가 특수해서 일반 함수와는 다른점도 있고 주의사항도 많습니다. 다음 것들은 생성자와 파괴자의 특징입니다. 이름이 정해져있습니다. 생성자의 이름은 클래스의 이름과 같고 파괴자의 이름은 클래스 이름 앞에 ~를 붙입니다. 클래스 이름이 MyClass라면 생성자의 이름은 MyClass()이고 파괴자의 이름은 예외없이 ~MyClass()입니다. 일반 함수처럼 사용자가 이름을 정할 ..
파괴자(Destructor) 생성자는 주로 멤버 변수의 값을 원하는 값으로 대입하는 작업을 하지만 그 외 객체가 동작하는데 필요한 모든 초기화 처리를 담당하기도 합니다. 앞의 코드를 보면서 가겠습니다.12345678class RandNum{public: RandNum() { srand(time(NULL)); }};csRandNum객체는 난수를 캡슐화 하는데 난수가 무작위로 생성되려면 srand(time(NULL)) 함수로 난수 발생기를 초기화해야합니다. 이 작업을 생성자가 담당함으로써 객체를 생성하는 즉시 난수 발생기가 초기화됩니다. 이외에 필요한 버퍼를 동적으로 할당하거나 객체가 사용하는 파일을 오픈하는 일도 생성자의 몫입니다. 요컨데 생성자가 객체가 제대로 동작하기 위한 모든 처리를 담당하는 함수입니..
생성자 객체초기화 클래스의 객체를 선언하면 메모리에 이 객체가 즉시 생성됩니다. 그러나 메모리만 할당 될뿐이지 초기화는 되지 않으므로 객체내의 멤버 변수들은 모두 쓰레기값을 가지고 있을 것입니다. 쓰레기값을 가지고있는 객체는 쓸모가 없으며 그래서 객체 선언문 다음에는 통상 객체가 원하는 상태로 초기화 하는 대입문이 따라옵니다. 초기화를 해야만 비로소 유용한 정보를 가지는 객체가됩니다.1234Position posit;Posit.x=40;Posit.y=10;Posit.ch='A'csPosition Posit; 선언문에 의해 메모리에 Posit객체가 할당되지만 이 객체의 x,y,ch멤버는 초기화되지 않은 쓰레기값을 가지고 있습니다. Posit가 위치를 가지는 문자라는 실세계의 대상을 표현하려면 (x,y)가 ..
인스턴스 클래스는 어디까지 타입일 뿐이지 그 자체가 정보를 저장하는 변수는 아닙니다. 구조체를 선언한다고해서 구조체 변수가 생기는 것이 아닌 것처럼 클래스를 선언한다고 해서 실제로 값을 기억할 수 있는 메모리가 할당되지 않습니다. 클래스 선언은 어떤 타입의 어떤 멤버들이 포함되어 있는지를 컴파일러에게 알리는 역할만 할 뿐이며 클래스형의 변수를 선언해야 실제 메모리가 할당됩니다. Position Here;Complex C; Position Here; 선언에 의해 Position 타입의 변수 Here가 메모리에 생성되며 이후 Here는 특정 위치를 가지는 문자 하나에 대한 정보를 기억할 수 있습니다. Complex C; 선언문은 복소수를 기억하는 변수 C를 생성합니다. int i;선언에 의해 정수형 변수 i..