일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- set
- 아두이노 소스
- Algorithm
- queue
- 라인트레이서
- 수광 소자
- priority_queue
- WinAPI
- 아두이노 컴파일러
- html
- map
- Deque
- 컴퓨터 그래픽스
- Arduino
- 자료구조
- 운영체제
- LineTracer
- c++
- C언어
- Visual Micro
- stl
- list
- 통계학
- Array
- vector
- 아두이노
- Stack
- 시스템프로그래밍
- arduino compiler
- directx
- Today
- Total
목록c++ (17)
Kim's Programming
::레퍼런스 멤버 초기화 레퍼런스는 변수에 대한 별명이며 선언할 때 반드시 누구에 대한 별명인지를 밝혀야 합니다.단 예외적으로 함수의 형식 인수, 클래스의 멤버, 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..
Class(클래스) C++의 구조체는 멤버 함수를 포함할 수 있다는 면에서 C의 구조체에 비해 의미가 확장되었습니다. 이형 타입 변수의 집합인 구조체가 스스로 동작을 정의할 수 있다는 것은 중요한 의미가 있으며 객체 지향 구현을 위한 첫 걸음이라고 할 수 있습니다. C++의 창시자인 스트로스트룸은 확장된 의미의 구조체에 새로운 이름을 붙여주었는데 그것도 Class입니다.앞에서 예시로 들었던 구조체의 struct를 class로 바꿔주고 선언문 선두에 public: 액세스 지정을 하면 됩니다.12345678class Position{public: int x; int y; char ch; void OutPosition(); };cs모든 구조체들을 이렇게 수정하면 잘 실행됩니다. 확장된 구조체와 클래스의 유일한..
구조체의 확장 멤버함수 구조체는 타입이 서로 다른 이형 변수의 집합입니다. 화면상의 한 좌표와 그 위치에 출력될 문자에 대한 정보를 저장하고 싶다면 다음과 같은 구조체를 선언해야합니다. 좌표값 (x, y)는 정수형이고 문자 ch는 문자형이기 떄문에 서로 타입이 다르고 이형 타입 변수의 집합인 구조체로 묶어서 정의합니다.123456struct Position{ int x; int y; char ch;}cs타입의 이름은 Position이고 이 구조체 안에 x, y, ch 멤버가 포함되어 있습니다. 다음 예제는 이 구조체를 사용하여 화면에 한 문자를 출력합니다. 1234567891011121314151617181920212223#include struct Position{ int x; int y; char c..