뚜둔뚜둔✩

판다의 개발일지

[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

[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++] 생성자와 초기화 리스트 (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 1
[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++] 구조체(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
[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++] 함수의 선언과 구현부 분리

선언과 구현부 분리 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++] 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++] 범위 확인 연산자 (::)

Scope Resolution Operator 범위 확인 연산자 ::은 특정 namespace에 포함되는 identifer 접근에 사용된다. namespace foo { void init(void) { }// ① } namespace goo { void init(void) { }// ② } void init(void) { }// ③ 앞선 글에서 설명했듯이, 각 ① ② ③ 함수는 모두 같은 이름을 갖지만 서로 각기 다른 namespace 안에 정의된 함수이다. [C++] namespace 변수나 함수, 구조체 등에 사용되는 이름은 해당 요소를 지정하는 identifier이다. Identifier의 역할을 수행하려면 각 이름은 unique 해야 하는데.. 프로그램의 규모가 커 많은 함수가 포함될수록, 또 p..

C · C++ 2021.12.15 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
[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
[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] const type qualifier

const type qualifier(형식 한정자)는 개체를 수정할 수 없는 것으로 선언한다. 즉, 일반적으로 설정된 값을 변경할 수 있던 변수를 read-only 성질로 변경한다. 따라서 const 사용을 통해 컴파일러에게 특정 변수의 값은 변경되어선 안 된다는 정보를 전달할 수 있다. #1. 포인터가 아닌 변수의 상수화 const int n = 10; n = 20;// ERROR, type of n is const-qualified 포인터가 아닌 변수에 const를 붙이면 해당 변수는 처음에 지정된 값으로만 읽을 수 있으며, 새로운 값을 지정할 수 없다. #2. non-constant pointer to constant data (포인터 변수의 상수화) const int *p = &x; *p = 10..

C · C++ 2021.12.21 0
[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
[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