일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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언어
- Stack
- arduino compiler
- stl
- 라인트레이서
- vector
- map
- WinAPI
- list
- 운영체제
- html
- set
- Array
- priority_queue
- queue
- 자료구조
- Arduino
- 통계학
- 컴퓨터 그래픽스
- Deque
- c++
- 수광 소자
- directx
- LineTracer
- Algorithm
- 아두이노 소스
- Visual Micro
- Today
- Total
목록Programming/Cplusplus (21)
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 형이 없는 것 처럼 이용하기 위하여 변환할 ..
namespace의 사용 namespace는 변수명의 충돌을 막기위해서 사용합니다. 다음 소스의 경우를 보겠습니다. 123456789101112131415161718#include namespace ABC{ int i;}namespace DEF{ double i;} void main(){ int i;//지역 변수 ABC::i;//네임스페이스 ABC 변수 DEF::i;//네임스페이스 DEF 변수}cs 전부 같은 i입니다. 6번째, 10번째, 그리고 15번째 모두 같은 i라고 선언이 되어있습니다. 하지만 다르게 쓸 방법이 필요하다면? 이런경우에 namespace를 쓰게 됩니다. 다 같은 i지만 namespace를 사용함으로써 같으면서 다른 i들이 됩니다. namespace의 규칙 namespace는 다음과 ..
상속의 특성 C++상속의 특성 객체 지향이라는 똑같은 이론에 기반하더라도 각 언어별로 상속을 구현하는 방법과 수준에는 다소 차이가 있습니다. C++언어의 상속은 대체로 세 가지 정도로 특징을 요약할 수 있습니다. 하나의 기반 클래스로부터 여러 개의 클래스를 파생시킬 수 있습니다. 세포라는 기본적인 속 성과 호흡한다, 번식한다, 등의 동작을 가지는 생물로부터 동물을 파생시켜 움직인다는 동작을 추가할 수 있습니다. 동물은 생물의 모든 특성을 가지기 때문에 이런 파생이 가능합니다. 마찬가지로 생물로부터 식물이나 미생물도 파생 가능한데 둘 다 생물의 일종이기 떄문입니다.이렇게 되면 동물, 식물, 미생물은 공동의 조상인 생물로부터 물려받은 속성과 동작을 공유하게 됩니다. 물론 각 파생 클래스는 기반 클래스로부터 ..
상속 클래스 확장 상속은 캡슐화, 추상화와 함께 객체 지향 프로그래밍의 중요한 특징중 하나입니다. 캡슐화와 추 상화는 객체가 온전한 부품이 될 수 있는 방법을 제공하는데 비해 상속은 클래스를 좀 더 쉽게 만들 수 있는 고수준의 재사용성을 확보하고 클래스간의 계층적인 관계를 구성함으로써 객체 지향의 또 다른 큰 특징인 다형성의 문법적 토대가 됩니다. 상속(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);..