*함수 오버로딩 - 암묵적 형변환 implicit type conversion
#include <iostream>
using namespace std;
void process(int value) {
cout << "(int) 호출" << value << endl;
}
void process(int value, int value2) {
cout << "(int, int) 호출" << value * value2 << endl;
}
void process(float value) {
cout << "(float) 호출" << value << endl;
}
void process(float value, float value2) {
cout << "(float, float) 호출" << value * value2 << endl;
}
int main() {
process(10); //(int) 호출
process(3, 4.3);//(int, int) 호출
process(4.3, 3);
return 0;
}
- main() 에서 process 함수에 전달하는 인자는 (3, 4.3)이고 4.3은 double 형이기 때문에, double에 해당하는 함수가 없으므로 int 로의 암묵적 형변환이 일어난다.
- process(3, 4.3f) 로 float를 명시하는 경우 매개변수의 데이터 타입(int, float)이 모호해 컴파일 에러가 난다.
(강의에서는 float 에서 int 로 형변환이 일어난다고 잘못 설명하고 있었다...)
cin vs. getline (참고: https://kyu9341.github.io/C-C/2020/01/17/C++getline()/)
- cin
>> 공백이나 개행 문자 기준으로 입력을 parse한다.
- cin.getline()
cin.getline(char* str, streamsize n);
cin.getline(char* str, streamsize n, char dlim);
>> istream 라이브러리에 속한다.
>> \0 (null 문자, terminator) 를 마지막으로 하는 c-string 을 str 에 저장
>> n-1 개의 문자를 입력받고 n 번째 문자는 '\0' 로 저장
>> 세번째 인수는 구분 기준이 되는 문자. 미입력시 기본값인 '\n' (개행문자)를 구분자(delimiter)로 사용
- getline()
getline(istream& is, string str);
getline(istream& is, string str, char dlim);
>> string 라이브러리에 속한다.
>> 최대 문자수 입력이 필요하지 않고, 구분자(delimiter) 까지 스트링으로 저장.
>> 첫번째 인자는 인풋스트림 오브젝트. 예: getline(cin, str);
- cin.get() : 문자를 하나만 가져온다. (공백, 개행 포함)
- cin.ignore() - 입력 버퍼의 데이터 제거
---------
cin 으로 입력된 데이터를 char 문자열과 string 에 저장하는 프로세스를 살펴보았다.
#include <iostream>
using namespace std;
const int kSize = 5;
int main() {
// 문자열에 저장
char Array[kSize];
for (int i = 0; i < kSize; i++) {
cout << i + 1 << "번째 문자를 입력하세요: " << endl;
cin >> Array[i];
cout << "저장: " << Array[i] << endl;
}
// 스트링에 저장
string input;
cout << "텍스트를 입력하세요: " << endl;
cin >> input;
cout << "저장: " << input << endl;
// Array 에 저장한 문자열 출력
for (int i = 0; i < kSize; i++) {
cout << Array[i] << " ";
}
// input 에 저장한 스트링 출력
cout << input;
return 0;
}
결과:
- cin 에 elevator 가 입력됐을 때
1. 첫번째 반복문 실행 시 cin 에 elevator 가 입력된다
2. 'e' 'l' 'e' 'v' 'a' 가 Array[i] 에 대입된다.
3. 반복문을 빠져나왔을 때 아직 입력버퍼에 데이터('t', 'o', 'r', '\0')가 남아 있다.
4. cin >> input 은 새로 입력을 받는 것이 아니라 입력 버퍼에 남아있는 데이터를 input 에 대입한다. ('\0' delimiter 전까지)
----
클래스 멤버 함수 - const
https://www.geeksforgeeks.org/const-member-functions-c/
Const member functions in C++ - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
----
static : 최초 선언을 실행할 때 초기화, 메모리가 할당 되고 계속해서 같은 위치를 가리킴. global variable 과 비슷한 느낌. (global variable 처럼 액세스할 수는 없지만)
----
난수
#include <stdlib>
#include <ctime>
...
srand(static_cast<unsigned int>(time(NULL)));
int num = rand() % 100 + 1;
----
수학 공식
모르면 못푸는 수학 공식들(계속 수정)
중학교, 고등학교 수학시간에 배우고 써먹었던 간단한 공식들이지만 코딩에 적용해야할 때 까먹는 경우가 빈번한 것 같아서 몇가지 수학 공식들을 적어둡니다.(계속 추가 및 수정할 예정입니다
jow1025.tistory.com
----
Vector
https://hwan-shell.tistory.com/119
C++ vector사용법 및 설명 (장&단점)
C++의 vector는 C++ 표준라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class를 말합니다. vector를 생성하면 메모리 heap에 생성되며 동적할당됩니다. 물론 속도
hwan-shell.tistory.com
----
과제하며 실수한 것들
- destructor 선언시 virtual 함수로 만들어서 delete 실행 시 자손 클래스의 destructor 가 호출될 수 있도록 하기
- class 정의 후 세미콜론;;;;;;
- 객체 포인터 생성 --> 멤버 함수 호출 시 -> 로 접근
-
'언리얼_엔진_게임개발_공부 > C++' 카테고리의 다른 글
[C++] 복사하기 - std::memcpy / std::copy, copy_if (0) | 2024.12.31 |
---|---|
[C++] <algorithm> search() / <string> find() (0) | 2024.12.30 |
[C++] cin 에 대하여... >>, getline, cin.getline / cin.ignore 관련 이슈 / cin 플래그 값 (0) | 2024.12.27 |
[C++] vector, map / sort, find / reverse iterator and base iterator (2) | 2024.12.24 |
[C++] string to int / vector iterator / merge sort (0) | 2024.12.24 |