뚜둔뚜둔✩

판다의 개발일지

[C++] 템플릿 함수 오버로딩 (Template Function Overloading)

C++에서는 함수 오버로딩 기능을 더더욱 유용하게 사용할 수 있도록 템플릿 기능을 제공한다. 하지만 템플릿을 사용하게 되면 동일 형태의 함수는 모두 동일한 동작을 수행하게 된다. 만약 특정 몇몇 경우에만 다르게 동작하게 하고 싶을 때에는 어떻게 할 수 있을까? [C++] 템플릿(Template) 함수 C++에서는 함수의 오버로딩이 가능하다. [C++] 함수 오버로딩(Overloading) C언어와 달리 C++에서는 함수의 인자(parameter) 타입이나 개수가 다르면 동일한 이름의 함수를 여러 개 만들 수 있다. 이를 함 pandas-are-bears.tistory.com [C++] 함수 오버로딩(Overloading) C언어와 달리 C++에서는 함수의 인자(parameter) 타입이나 개수가 다르면 ..

C · C++ 2023.07.02 0

[C++] 복사 생성자 (Copy Constructor)

모든 객체는 생성 시 "생성자" 함수를 자동으로 호출한다. [C++] 구조체(struct)와 클래스(class) 구조체 여러 데이터 값을 갖는 어떤 새로운 타입을 정의할 때 흔히 구조체를 사용한다. C 언어에서의 구조체는 실제 데이터만을 포함하지만 C++에서는 데이터뿐만 아니라 생성자, 소멸자, 멤버 pandas-are-bears.tistory.com 컴파일러와 생성자 생성자는 반드시 생성 시에 호출되기 때문에, 사용자가 생성자를 별도로 선언하지 않아도 컴파일러가 아무 동작을 하지 않는 생성자를 자동으로 생성하여 추가한다. 다음 예시에서 볼 수 있듯이, 컴파일러가 자동 생성하는 생성자 덕분에 p1 선언에는 문제가 없지만 p2 선언은 컴파일 에러가 발생한다. class Point { private: int..

C · C++ 2023.01.15 0

[VSCode] Task 활용하기

커스텀 Task 정의하기 Others를 선택하게 되면 task.json 파일이 생성되고 여기에 커스텀 task를 등록할 수 있다. task.json 등록된 task 목록 task1 수행 결과 커스텀 Task 설정 "label"은 task 목록에 뜰 task 이름이다. "type"은 "shell"을 선택하게 되면 task가 bash/cmd/Powershell에서 수행할 명령어로 해석된다. "command"는 실제로 수행할 명령어이다. "group"은 "build", "test", "none" 중 하나의 값을 가질 수 있다. group 분류는 task 수행 때 의미가 있다. Run Task는 "build", "test", "none" 모든 task의 목록을 보여주고, Run Build Task와 Run Te..

기타 2022.07.28 0

[C++] 템플릿(Template) 함수

C++에서는 함수의 오버로딩이 가능하다. [C++] 함수 오버로딩(Overloading) C언어와 달리 C++에서는 함수의 인자(parameter) 타입이나 개수가 다르면 동일한 이름의 함수를 여러 개 만들 수 있다. 이를 함수 오버로딩이라 한다. int func(int param1); int func(char param1); int func(int.. pandas-are-bears.tistory.com C 언어에 비해선 편리해졌지만.. 여전히 나름의 불편함은 있다. 그 불편함은 바로 동일한 형태의 함수를 타입만 바꿔가며 일일이 다 작성해야 한다는 것이다. (오버로딩은 결국 동일 함수 이름의 사용만을 허용하는 것이기 때문) 여기서 유용한 것이 바로 C++의 템플릿이다. 템플릿은 말 그대로 일종의 "틀"을..

C · C++ 2022.07.27 0

[C++] 함수 오버로딩(Overloading)

C언어와 달리 C++에서는 함수의 인자(parameter) 타입이나 개수가 다르면 동일한 이름의 함수를 여러 개 만들 수 있다. 이를 함수 오버로딩이라 한다. int func(int param1); int func(char param1); int func(int param1, int param2); [ C언어 ] - 컴파일 실패 main.c:2:5: error: conflicting types for 'func' int func(char param1); ^ main.c:1:5: note: previous declaration is here int func(int param1); ^ main.c:3:5: error: conflicting types for 'func' int func(int param1, ..

C · C++ 2022.07.23 0

[C++] 생성자와 초기화 리스트 (Initializer List)

C++에서 생성자는 어떤 구조체 또는 클래스 객체의 생성 시 자동으로 호출되는 함수이다. 따라서 생성자에서는 흔히 초기화에 필요한 동작을 수행하게 되는데, 이때 멤버 변수를 초기화하는 데에는 2가지 방법이 있다. class Point { public: Point(int x_val, int y_val); private: int x; int y; };​ (1) 생성자 함수 블록 내에서 멤버 변수 초기화 (대입) Point::Point(int x_val, int y_val) { x = x_val; y = y_val; } (2) 초기화 리스트로 초기화 (초기화) Point::Point(int x_val, int y_val) : x(x_val), y(y_val) { } 초기화 리스트는 객체의 생성 후 값을 대입하..

C · C++ 2022.05.26 0
[C++] 구조체(struct)와 클래스(class)

구조체 여러 데이터 값을 갖는 어떤 새로운 타입을 정의할 때 흔히 구조체를 사용한다. C 언어에서의 구조체는 실제 데이터만을 포함하지만 C++에서는 데이터뿐만 아니라 생성자, 소멸자, 멤버 함수, 접근 지정자를 포함할 수 있다는 것이 다르다. [ C언어 ] struct Point { int x; int y; }; [ C++ ] struct Point { private: int x; int y; public: Point() {} ~Point() {} int getX(void) { return x; } int getY(void) { return y; } }; 접근 지정자 C++ 구조체는 접근 지정자로 특정 멤버 변수 및 함수를 외부에서 접근할 수 없게 할 수 있다. private 접근 지정자는 외부에서의 접..

C · C++ 2022.05.15 2
[HTML/CSS] 색상 코드 (Color Names)

HTML 삽입 미리보기할 수 없는 소스 빨강 계열 (Red) Color Name Hex RGB IndianRed #CD5C5C rgb(205, 92, 92) LightCoral #F08080 rgb(240, 128, 128) Salmon #FA8072 rgb(250, 128, 114) DarkSalmon #E9967A rgb(233, 150, 122) LightSalmon #FFA07A rgb(255, 160, 122) Crimson #DC143C rgb(220, 20, 60) Red #FF0000 rgb(255, 0, 0) FireBrick #B22222 rgb(178, 34, 34) DarkRed #8B0000 rgb(139, 0, 0) 분홍 계열 (Pink) Color Name Hex RGB Pin..

기타 2022.05.22 0
[C++] 초기화 (Initialization)

대입과 초기화 대입 (Assignment) 대입은 = 대입 연산자를 사용하여 어떤 변수에 값을 지정하는 것이다. 이를 "copy assignment"라고도 하는데, 그 이유는 대입은 등호 왼쪽의 객체(변수)에 등호 오른쪽의 값을 복사하는 행위이기 때문이다. 하지만 그렇기 때문에 연산자 왼쪽의 객체(변수)가 이미 정의/생성되어 있어야 한다. 초기화 (Initialization) 반면, 초기화는 객체의 생성과 함께 최초의 설정값을 지정하는 것이다. 따라서 함수 호출의 회수가 대입에 비해 적으며 더 빠르기도 하다. 초기화로는 상수(const) 변수의 값 설정 또한 가능하다. 초기화의 방식 class Point { public: Point(int x_val, int y_val) { x = x_val; y = y..

C · C++ 2022.05.25 0
[C++] 복사 생성자 (Copy Constructor)

모든 객체는 생성 시 "생성자" 함수를 자동으로 호출한다. [C++] 구조체(struct)와 클래스(class) 구조체 여러 데이터 값을 갖는 어떤 새로운 타입을 정의할 때 흔히 구조체를 사용한다. C 언어에서의 구조체는 실제 데이터만을 포함하지만 C++에서는 데이터뿐만 아니라 생성자, 소멸자, 멤버 pandas-are-bears.tistory.com 컴파일러와 생성자 생성자는 반드시 생성 시에 호출되기 때문에, 사용자가 생성자를 별도로 선언하지 않아도 컴파일러가 아무 동작을 하지 않는 생성자를 자동으로 생성하여 추가한다. 다음 예시에서 볼 수 있듯이, 컴파일러가 자동 생성하는 생성자 덕분에 p1 선언에는 문제가 없지만 p2 선언은 컴파일 에러가 발생한다. class Point { private: int..

C · C++ 2023.01.15 0
[C++] 함수의 선언과 구현부 분리

선언과 구현부 분리 C++ 클래스의 멤버 함수는 클래스 안에서 구현될 수도 있고, 또는 클래스 내부에는 멤버 함수의 선언만 되고 클래스 외부에서 구현될 수 있다. (1) 클래스 내부 멤버 함수 구현 // Point.h class Point { private: int x; int y; public: int getX(void) { return x; } } ※ 클래스 내부 구현된 함수는 인라인(inline) 함수 취급되는 특징이 있다. (2) 클래스 멤버 함수의 선언과 구현부 분리 // Point.h class Point { private: int x; int y; public: int getX(void); } // Point.cpp int Point::getX(void) { return x; } 분리된 구현..

C · C++ 2022.07.13 0
[C] printf 함수

#include int printf(const char *format, ...); printf 함수는 C에서의 표준 출력 함수로, 표준 출력 스트림인 stdout(standard output)에 정해진 format 형식의 문자열을 출력한다. format은 const char* 타입으로, printf 사용 시 출력하고자 하는 형태의 문자열을 format specifier 및 escape sequence와 함께 구성하여 "...." 형태로 전달한다. Escape Sequence 출력하고자 하는 문자열은 " 큰 따옴표로 둘러싸인 문자열로 전달된다. 만약 "Hello World"라는 문자열을 (큰 따옴표까지 포함하여) 출력하려면 다음과 같이 하면 될까? printf(""Hello World""); 답은, '아니..

C · C++ 2021.12.21 0
[C++] namespace 사용 및 특징

Namespace 사용(접근) 일반적으로, namespace 안 identifer 접근에는 범위 확인 연산자가 사용된다. [C++] 범위 확인 연산자 (::) Scope Resolution Operator 범위 확인 연산자 :: 은 특정 namespace에 포함되는 identifer 접근에 사용된다. namespace foo { void init(void) { } // ① } namespace goo { void init(void) { } // ② } void ini.. pandas-are-bears.tistory.com 예를 들어, foo라는 namespace 안 check라는 이름의 함수를 호출하려면 다음과 같은 코드 작성이 필요하다. int main(void) { foo::check(); } 이 c..

C · C++ 2021.12.18 0
[C(++)] Header Guard (헤더 가드) Coding

HTML 삽입 미리보기할 수 없는 소스 .h 헤더 파일은 다른 .c나 .cpp 파일에 의해 include 되는 파일로, 여러 파일에서 공통적으로 사용되는 함수 정의 및 매크로, 구조체 등이 정의된 파일이다. #include 헤더 파일에는 1) 개발자가 직접 작성한 .h 헤더 파일과 2) 컴파일러가 제공하는 헤더 파일, 이렇게 2가지 종류가 있다. 종류에 따라 #include 전처리기를 선언하는 방법이 다음과 같이 달라진다. 1) 직접 작성 헤더 파일 #include "header_file" 2) 시스템 헤더 파일 #include 그렇다면 이 #include 전처리기는 어떤 동작을 하는지 살펴보자. 특정 파일에 #include 전처리기로 헤더 파일을 include 하는 것은 해당 파일에 헤더 파일 내용을 ..

C · C++ 2022.02.05 0
[VSCode] Task 활용하기

커스텀 Task 정의하기 Others를 선택하게 되면 task.json 파일이 생성되고 여기에 커스텀 task를 등록할 수 있다. task.json 등록된 task 목록 task1 수행 결과 커스텀 Task 설정 "label"은 task 목록에 뜰 task 이름이다. "type"은 "shell"을 선택하게 되면 task가 bash/cmd/Powershell에서 수행할 명령어로 해석된다. "command"는 실제로 수행할 명령어이다. "group"은 "build", "test", "none" 중 하나의 값을 가질 수 있다. group 분류는 task 수행 때 의미가 있다. Run Task는 "build", "test", "none" 모든 task의 목록을 보여주고, Run Build Task와 Run Te..

기타 2022.07.28 0
[PRACTICE] 변수 사용

HTML 삽입 미리보기할 수 없는 소스 MACRO PRACTICE script에서는 macro를 변수(variable)로 사용한다. macro는 &로 시작하며 영문자(a-z, A-Z)와 숫자(0-9), 언더스코어(_)로만 구성된다. 또, & 바로 다음으로는 숫자를 사용할 수 없으며, 대소문자가 구분된다. script 내 변수의 scope은 1) PRIVATE, 2) LOCAL, 3) GLOBAL 명령어로 지정된다. PRIVATE macro가 선언된 script / 서브루틴 / 블록 이내에서만 유효하며, script / 서브루틴 / 블록이 끝나면 제거된다. macro가 선언된 블록 내 중첩된 블록에서는 유효하지만, 다른 호출된 script 또는 서브루틴에서는 유효하지 않다. LOCAL macro가 선언된 ..

SCRIPT 2022.05.07 0
[PRACTICE] 조건문과 반복문

HTML 삽입 미리보기할 수 없는 소스 조건문 주어진 조건에 따라 수행하는 명령을 제어한다. IF "&testfunc"!="" ( IF Var.VALUE(&testfunc)==&correct_result ( PRINT FORMAT.STRing("&testfunc=&correct_result",50.,' ') ) ELSE ( PRINT FORMAT.STRing("&testfunc failed with &result (&correct_result)",50.,' ') ) ) 이때 조건문의 condition은 TRACE32 syntax를 따라야 한다. 또는, 사용된 programming 언어의 syntax로 condition을 정의할 수 있다. Var.IF (flags[0]==flags[5]) PRINT "Va..

SCRIPT 2022.05.06 0
[PRACTICE] Basics

HTML 삽입 미리보기할 수 없는 소스 1) 주석 추가하기 // 또는 ; 추가로 한 줄 주석을 추가할 수 있다. // comments start with // or ; or ; 하지만 ;의 경우, Var command group에서 주석이 아닌 다른 의미로 사용될 수 있기 때문에 //로 주석을 추가하는 것이 더 안전하다. Var.View flags[3];ast.count;i 2) 여러 줄에 나눠 쓰기 어떤 매우 긴 명령은 백슬래시(\)를 사용해 여러 줄에 나누어 작성할 수 있다. APPEND test_protocol.txt\ FORMAT.STRing("&testfunc=&correct_result",50.,' ')\ FORMAT.UnixTime("c",DATE.UnixTime(),DATE.utcOffSe..

SCRIPT 2022.05.06 0
[PRACTICE] STRing Functions

PRACTICE script에서 문자열(string)을 변형하고 조작하는 기능을 사용할 수 있다. HTML 삽입 문자열에 대한 정보 STRing.CHAR Extract a character syntax STRing.CHAR("",) return type Hex "" 내에서 위치의 character 하나를 반환한다. 만약 가 ""의 길이를 넘어간다면 0xFFFFFFFFFFFFFFFF(=-1)를 반환한다. PRINT STRing.CHAR("abcdef",2.) // 0x63 (=> 'c') STRing.LENgth Length of string syntax STRing.LENgth("") return type Decimal ""의 문자열 길이를 반환한다. PRINT STRing.LENgth("abcdef")..

SCRIPT 2022.06.19 0