CPP 32

[c++개념공부]함수 오버로딩, 생성자, default

💻함수의 오버로딩 c에서 같은 이름을 가진 함수는 불가능 c++ 에서는 같은 이름을 가진 함수가 여러 개 가능하다. c++에서 같은 이름의 함수를 호출할 때 구분하는 방법 : 함수를 호출할 때 사용하는 인자를 보고 결정한다. c++ 에서는 컴파일러가 알아서 적합한 인자를 가지는 함수를 호출해준다. 단 정확하게 인자가 일치하지 않는다면 가장 근접한 함수를 찾는다. c++ 컴파일러에서 함수를 오버로딩하는 과정! (단, 같은 과정에서 2개 이상 일치 시 오류 발생) 자신의 타입이 일치하는 함수를 찾는다. 정확하게 일치가 없는경우 char, unsigned char, short → int unsinged shot 는 크기에 따라 int 또는 unsigned int float → double Enum → int ..

[c++개념공부]참조자와 이름공간

💻 이름공간(namespace) std란 : c++의 표준라이브러리의 모든 함수, 객체들이 정의되어 있는 이름공간(namespace)이다. 이름공간의 존재이유 : 같은 이름의 함수들을 사용하기 위해서! (모듈화 프로그래밍을 더 편리하게 하기 위해서 이다.)코드가 길어질수록 중복된 이름을 가진 함수들이 많아진다. C++ 에서는 이를 구분하기 위해, 같은 이름이라도, 소속된 이름 공간이 다르면 다른 것으로 취급한다. 즉 C++에서는 같은이름의 함수를 이름공간만 다르게해서 사용이 가능한 것이다. 예시모음 이름공간 정의 예시 //header.h 내부 예시 namespace header1 { int foo(); // 사용할 아무 함수나 적어놓는다. void bar(); } //다음과 같이 정의한 header.h ..

[c++개념공부]동적할당과 class

💻동적할당newc언어의 malloc 과 같은 기능을 하는 c++ 의 함수라고 보면된다. 단 malloc 과 다른점은 객체를 동적으로 생성하면서 동시에 생성자를 호출한다는 특징있음.사용법T* pointer = new T[size];예시 std::cin >> arr_size; int *list = new int[arr_size]; Deletedelete[] list; 이렇게 사용해주면 지워진다.오직 new 로 만든 공간만 delete 를 사용할 수 있다.객체지향 프로그래밍프로그래밍의 역사 1세대 (ENIAC) : 진공관을 조작해서 코딩함. 수정하기 위해서는 19000개에 다라는 진공관을 확인했어야 함2세대 (Assembly languege) : 컴퓨터 내장 메모리가 생기고 실직적 프로그래밍을 할수 있고자 등..

[c++개념공부] 생성자 초기화리스트, static 변수 함수, 레퍼런스 리턴 함수, this

생성자의 초기화 리스트 생성자의 초기화 리스트란 : 생성자 호출과 동시에 멤버 변수들을 초기화해준다. 생성자 초기화 리스 Marine::Marine() : hp(50), coord_x(0), \ coord_y(0), damage(5), is_dead(false) {} //두개는 같은 의미의 코드이다. Marine::Marine() { hp = 50; coord_x = coord_y = 0; damage = 5; is_dead = false; } 멤버 초기화 리스트 흥미로운점은 원래 생성자에서 멤버 변수와 같은 매개변수를 사용하면 안되는데, 생성자 초기화 리스트에서는 그게 가능하다. Marine::Marine(int coord_x, int coord_y) : coord_x(coord_x), coord_y(..

[CPP 모듈 고민]SEARCH에서 출력 순서

가장 나중에 넣은걸 가장 뒤로 하고 싶은데 이렇게 해도 되는걸까?굳이 싶긴하다.이전코드print_row_sep(); int size(idx); if (is_full== true) size=8; for (int i=0;i < size;i++) { print_each_col(i); if (idx -size + i < 0) print_each_col(idx -size + i + 8); else print_each_col(idx -size + i); print_row_sep(); }수정코드print_row_sep(); int size(idx); if (is_full== true) size=8; for (int i=0;i < size;i++) { print_each_col(i); print_row_sep(); }..

CPP/Cpp module 2023.01.15

[Cpp 개념공부]__how to user input the noprintable ascii on cin (어떻게 cin에서 none printable를 받을 수 있을까)__

과제 중 none printable 한 것들을 입력 받는 경우에 대한 예외를 처리하려고 하는데 그것을 입력 받는 방법을 몰라서 테스트를 못하고 있다.추가적으로 널을 입력 받는 방법도 궁금하다.일단 내가 해결 한 방법은 ctrl +v 를 입력하면 신기하게도 22 이렇게 나오고 ctrl m을 하면 원하는 0 값이 나온다.테스트 코드#include int main() { std::string command; while (true) { std::string command; getline(std::cin,command); std::cout

CPP/Cpp module 2023.01.13

[Cpp 개념공부]__cin에서 endof 를 쏴줄 때 cin이 다시 사용하지 못하는 이슈__

나의 궁금증을 한줄로 요약하자면안녕하세요 혹시 cin을 입력 받을 때 유닉스의 경우 ctrl+d 윈도우의 경우 ctrl+z를 입력하면 endof를 입력이 되는걸로 알고 있는데 이렇게 입력을 받고나면은 다른 cin은 전부 실행이 되지 않고, 끝나게 됩니다. cin이 endof를 받게되면 endofbit를 초기화해서 stdin을 사용하지 못하게 하는 것 같은데, 이것을 혹시 되돌려서 다시 cin 즉 stdin을 받는 방법을 아실까 싶어서 댓글 남겨봅니다. 감사합니다! cin에서 endof 를 쏴줄 때 cin이 다시 사용하지 못하도록 변하는 것 같다.이 문제를 어떻게 해결 할 수 있을까?완전히 고장나는 것일까? try catch를 하는 것 말고 cin을 고치는 방법은 없는 걸까?window와 unix에서의 e..

CPP/Cpp module 2023.01.13

[Cpp 개념공부]cin대신 getline

cin을 사용하면 공백과 개행을 기준으로 입력을 받으므로 getline함수를 이용해서 한줄을 통째로 받도록하자.cin과 getline을 동시에 사용할 때 생기는 이슈cin의 경우 입력을 “aaa\n”이렇게 넣어주더라도, aaa까지만 입력에 들어오고 뒤의 \n의 경우 남아있어서 getline함수가 그것을 버퍼에 가지고 있을 수 있습니다.getline사용법사용법 1#include int main() { string command; getline(std::cin,command); }다음과 같이 cin할 녀석과 입력을 받아서 저장할 인스턴스를 미리 지정해주면, 위 코드에서는 command string에 개행 기준으로 넣게 된다.이전에 string 사용법에서 잘 정리해줘서 그걸 보고 getline함수를 쓰면 된다..

CPP/Cpp module 2023.01.13
728x90