일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 아두이노 컴파일러
- 아두이노 소스
- html
- Visual Micro
- WinAPI
- set
- Algorithm
- 자료구조
- c++
- LineTracer
- Arduino
- queue
- list
- priority_queue
- directx
- map
- 시스템프로그래밍
- stl
- Array
- 수광 소자
- C언어
- 컴퓨터 그래픽스
- 운영체제
- 통계학
- 라인트레이서
- Stack
- vector
- arduino compiler
- 아두이노
- Deque
- Today
- Total
목록Programming (135)
Kim's Programming
가변 인수 함수의 조건 가변 인수 함수는 인수의 개수와 타입에 대한 제약이 없지만 그렇다고 해서 아무 인수나 마음대로 전달할 수 있는 것은 아닙니다. 가변 인수 함수에도 지켜야 할 규칙들이 있는데 이 규칙에 대해서 알아 보겠습니다. 가변 인수 함수는 반드시 하나 이상의 고정인수를 가져야 합니다. 첫 번째 인수부터 가변 인수일 수도 없는데 왜냐하면 가변 인수를 읽기 위한 포인터 ap를 초기화하기 위해서 마지막 고정 인수의 번지를 알아야 하기 떄문입니다. _crt_va_start 매크로는 마지막 고정 인수의 번지에 길이를 더해 가변 인수가 시작되는 번지를 계산하는데 고정인수가 없으면 이 매크로가 동작하지 않습니다. GetSum 함수는 인수의 개수를 전달하는 num 고정인수를 가지며 printf 함수도 서식 ..
함수 포인터 함수 포인터의 정의 함수포인터(Pointer To Function)란 함수를 가리키는 포인터를 말합니다. 포인터란 본래 메모리상의 번지를 저장하는 변수인데 함수도 메모리에 존재하며 시작 번지가 있으므로 포인터 변수로 가리킬 수 있습니다. 일반적인 포인터는 변수가 저장되어 있는 번지를 가리키지만 함수 포인터는 함수의 시작 번지를 가리킨다는 점에서 다릅니다. 함수 포인터와 구분하기 위해서는 변수를 가리키는 일반적인 포인터를 특별히 데이터 포인트라고 부르기도 합니다. 정수형을 가리키는 int *pi는 정수형 변수의 번지를 가지며 실수형을 가지는 double *pd는 실수형 변수의 번지를 가집니다. 데이터 포인터는 단순히 가리키는 대상체의 타입만 밝히면 되므로 선언 형식이 간단합니다. 반면 함수 포..
::레퍼런스 멤버 초기화 레퍼런스는 변수에 대한 별명이며 선언할 때 반드시 누구에 대한 별명인지를 밝혀야 합니다.단 예외적으로 함수의 형식 인수, 클래스의 멤버, extern 선언시는 대상체를 지정하지 않을 수 있는데 이때는 함수 호출시나 객체 생성시로 초기화가 연기됩니다. 레퍼런스 멤버를 가지는 클래스는 생성자에서 이 멤버를 초기화해야 하는데 다음 예제처럼 초기화 리스트를 사용합니다.1234567891011121314151617181920#define _CRT_SECURE_NO_WARNINGS#include#includeusing namespace std;class Some{public: int &ri; Some(int &i) :ri(i){} void OutValue() { cout
Const 상수의 정의 키워드 const는 값을 변경할 수 없는 상수를 정의합니다. 기본형태는 다음과 같습니다. const 타입 변수명 = 초기값; 변수를 선언하는 일반적인 문장과 비슷하되 앞에 const를 붙이고 뒤에 반드시 초기갑슬 적어야 한다는 점만 다릅니다. 다음 소스에서 보겠습니다.12345678910#include const int HourPerDay = 24;const int MinPerHour = 60;const int SecPerMin = 60; void main(){ printf("하루는 %d초 입니다. \n", HourPerDay*MinPerDay*SecPerDay);}Colored by Color Scriptercs하루는 24시간이고 한시간은 60분 1분은 60초 라고 정의 했습니다..
복사 생성자 복사 생성자는 지금까지의 것들 보다 난이도가 있습니다. 변수를 선언할 때 = 구분자 다음에 상수로 초기값을 지정할 수 있으며 이미 생성되어 있는 같은 타입의 다른 변수로도 초기화할 수 있습니다. 다음은 가장 간단한 타입인 정수형의 예입니다.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)가 ..