일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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++
- Arduino
- 시스템프로그래밍
- html
- 수광 소자
- arduino compiler
- priority_queue
- 운영체제
- set
- stl
- 자료구조
- vector
- Visual Micro
- 아두이노
- map
- directx
- 아두이노 컴파일러
- 라인트레이서
- Array
- Stack
- 컴퓨터 그래픽스
- Deque
- C언어
- queue
- list
- LineTracer
- 아두이노 소스
- Algorithm
- WinAPI
- 통계학
- Today
- Total
목록c++ (17)
Kim's Programming
C에서는 일반적으로 사용하는 캐스팅 방법은 괄호를 이용하여 (int*) 와 같은 것을 활용하여 형변환을 실행합니다. 일반적으로 C에서 이용할때 강제로 형변환을 하도록 하였지만 C++에서는 다양한 변환을 이용하여 Casting을 합니다. 이렇게 Casting을 하는 방법은 dynamic_cast, static_cast, const_cast, reinterpret_cast 4가지가 있습니다. dynamic_cast dynamic_cast는 상속관계에 있는 부모 자식의 클래스사이에서 다운케스팅을 할때 이용하게 됩니다. 반드시 소멸자를 virtual로 되어있어야 이용가능합니다. const_cast const 형으로 보호되어있는 것에 접근 할 떄 이용합니다. const 형이 없는 것 처럼 이용하기 위하여 변환할 ..
상속 클래스 확장 상속은 캡슐화, 추상화와 함께 객체 지향 프로그래밍의 중요한 특징중 하나입니다. 캡슐화와 추 상화는 객체가 온전한 부품이 될 수 있는 방법을 제공하는데 비해 상속은 클래스를 좀 더 쉽게 만들 수 있는 고수준의 재사용성을 확보하고 클래스간의 계층적인 관계를 구성함으로써 객체 지향의 또 다른 큰 특징인 다형성의 문법적 토대가 됩니다. 상속(Ingeritance의 사전적 의미는 자식이 부모가 가진 모든 것을 물려받는 것을 의미하는데 OOP의 상속도 기본적인 의미는 동일합니다. 이미 정의되어 있는 클래스의 모든 특성을 물려받아 새로운 클래스를 작성하는 기법을 상속이라고 합니다. 흔히 상속은 이미 만들어진 클래스를 재활용하기 위한 기법으로 소개되며 재활용이 상속의 가장 큰 장점이기는 하지만 상속..
오버로딩의 예 여기까지 주로 + 연산자만을 대상으로 연산자를 오버로딩하는 기본적인 방법에 대해 알아보았습니다. 덧셈 연산자가 가장 기본적이고 연산자의 일반적인 특징을 대변하는 대표적 연산자이기 떄문입니다. 이번엔 개별 연산자에 대해서 알아보며 기본 규칙외에도 연산자별로 고유한 규칙과 주의 사항들이 존재합니다. 모든 연산자에 일관되게 적용되는 규칙은 없고 연산자의 동작과 의미에 따라 오버로딩하는 방법이 다릅니다. 대개의 경우 상식과 일치하므로 어렵지는 않지만 연산자의 수가 많기 때문에 한꺼번에 다 공부할 수는 없습니다. 외우려기 보다는 연산자를 써야할때 상세하게 공부하는 것이 좋습니다. 연산자 몇개만 알아보겠습니다. 관계 연산자 관계 연산자는 동일한 타입의 두 객체에 대해 상등 및 대소를 비교합니다. 클래..
::리턴 타입 연산의 결과로 어떤 타입을 리턴할 것인가는 연산자별로 다릅니다. 정수끼리 더하면 정수가 되고 실수끼리 곱하면 실수가 되는 것처럼 객체에 대한 연산 결과는 보통 객체와 같은 타입이 되지만 반드시 그런 것은 아닙니다. 논리 연산자의 경우는 BOOL(또는 bool)형이나 int형이 리턴될 수도 있고 첨자 연산자 [ ]의 경우처럼 특수한 연산자는 멤버 중의 하나를 리턴하는 경우도 있습니다. 앞에 있던 Time클래스의 + Complex 클래스의 +는 둘 다 크래스형의 객체를 리턴했는데 그래야 연산결과를 제 3의 객체에 대입할 수 있습니다. 만약 +연산자가 덧셈만하고 결과를 리턴하지 않는다면 A=B+C같은 대입은 불가능할 것이며 A=B+C+D같은 계산도 할 수 없을 것입니다. 임의의 타입 T에 대한 ..
연산자 함수 기본형의 연산자 연산자를 오버로딩할 수 있다는 것은 C++의 언어의 큰 특징이며 클래스가 타입임을 보여주는 단적인 예라고 할 수 있습니다. 조금 어렵기는 하지만 문법이 체계적이어서 이해하고 나면 언어의 질서를 느낄 수 있으며 오히려 재밌기도 합니다. C/C++ 언어가 제공하는 기본형의 연산문을 한번 상펴보겠습니다. 대표적으로 덧셈 연산문을 보면 다음과 같은 구문이 가능합니다.12345int i1 = 1 , i2 = 2;double d1 = 3.3, d2 = 4.4 ; int i = i1 + i2;//정수 덧셈double d = d1 + d2;//실수 덧셈cs하나는 정수끼리 더해 정수형 변수에 대입하고 하나는 실수끼리 더해 실수형 변수에 대입하는데 둘다 잘 동작합니다. 연산 결과 i는 3이 되..
상수멤버 상수멤버 상수 멤버는 한 번 값이 정해지면 변경될 수 없는 멤버입니다. 클래스 전체에서 참조하는 중요한 산수가 있다면 이를 상수 멤버로 정의하여 클래스에 포함시킬 수 있습니다. 예를 들어 수학 계산을 하는 클래스에서 원주율을 자주 사용한다면 다음과 같이 상수 멤버를 정의합니다.1234567891011121314151617181920#includeusing namespace std;class Mathcalc{private: const double pie; public: Mathcalc(double apie) :pie(apie){} ~Mathcalc(){} void DoCalculate(double r) { printf("반지름 %.2f인 원의 둘래 = %.2f\n", r, r * 2 * pie);..
정적 멤버 변수 정적 멤버 변수는 클래스의 바깥에 선언되어 있지만 클래스에 속하며 객체별로 할당되지 않고 모든 객체가 공유하는 멤버입니다. 개별 객체와는 직접적인 상관이 없고 객체 전체를 대표하는 클래스와 관련된 정보를 저장하는 좀 특수한 멤버입니다. 정의가 좀 복잡해 보이는데 이런 멤버 변수가 왜 필요한지 소스를 보면서 알아보겠습니다. 다음 소스는 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 파일의..