operator concept
기존에 있던 operator 에 overloading을 하여 새로운 연산 방법을 추가하는 것. 함수 overloading을 연산자에 적용했다고 생각하면 된다.
operator structure
함수랑 똑같다. <operator> 는 그대로 써주어야 하고 (input operator) 에는 overloading 하고 싶은 연산자를 집어넣으면 된다. 그리고 input parameter 는 "input operator"가 연산할 내용.
(return type) <operator> (input operator) (input parameter)
"input operator" 에 대해서 input 받은 "input parameter"를 <operator> 에서 연산해서 (return type)으로 반환한다.
Example
* 참고로 "constructor _rgb (uint32_t rgb)"만 만들어 놓으면 "_rgb tmp;" 에서 오류가 발생하므로 "constructor _rgb ( ) { }" 형태도 만들어 놓아야 한다.
inline _rgb operator+(_rgb rgb): input 으로 들어온 rgb 의 attribute 들을 struct member attribute 에 더해서 새로운 _rgb 출력.
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 31 32 33 34 35 36 37 38 | struct _rgb { uint8_t r; uint8_t g; uint8_t b; _rgb () { } _rgb (uint32_t rgb) { rgb = *reinterpret_cast<int*>(&rgb); r = (rgb >> 16) & 0x0000FF; g = (rgb >> 8) & 0x0000FF; b = (rgb) & 0x0000FF; } inline _rgb operator+(_rgb rgb) { _rgb tmp; tmp.r = rgb.r + r; tmp.g = rgb.g + g; tmp.b = rgb.b + b; return tmp; } inline _rgb operator*(float fScaleFactor) { _rgb tmp; tmp.r = (float)r * fScaleFactor; tmp.g = (float)g * fScaleFactor; tmp.b = (float)b * fScaleFactor; return tmp; } }; typedef struct _rgb RGB; | cs |
Usage
fromColor*(1 - fScaleFactor) +: _rgb structure 가 input 으로 toColor*fScaleFactor; 받고 있다. 그리고 출력으로 _rgb tmp; 에서 새롭게 만든 _rgb data type 반환해서 RGB color 로 입력
1 2 3 4 5 6 7 8 9 10 | for (size_t i = 0; i < pCloudColored->points.size(); i++) { float fScaleFactor = (globalDistance.fDistances[i] - globalDistance.fMin_m)/(globalDistance.fMax_m - globalDistance.fMin_m); RGB color = fromColor*(1 - fScaleFactor) + toColor*fScaleFactor; uint32_t rgb = (static_cast<uint32_t>(color.r) << 16 | static_cast<uint32_t>(color.g) << 8 | static_cast<uint32_t>(color.b)); pCloudColored->points[i].rgb = *reinterpret_cast<float*>(&rgb); } | cs |
'Language > C++' 카테고리의 다른 글
class 초기화 순서 initialize list, in constructor, member variable (0) | 2019.05.25 |
---|---|
모듈러란? (Mod) (1) | 2019.05.11 |
생성자에 콜론( : ) 를 쓰는 이유 (0) | 2019.05.10 |