본문 바로가기

IT/C++(CPP)33

CPP 초급 강좌 100. C++ structured binding CPP 초급 강좌 100. C++ structured binding structured binding 에 대해서 적어볼게요 해당 기능은 cpp 17, c++17 부터 지원되는 내용입니다. 여러분의 프로젝트가 오래된 컴파일러를 사용하지고 있으시면 해당 코드는 동작을 안 하실수 있어요, 아니면 컴파일 옵션에 17을 기능을 사용가능하도록 옵션을 넣어주셔야 할 듯합니다. structured binding 기능은 구조체가 배열에서 각 멤버의 값을 껀낼 때 사용하실수 있습니다. 하나의 구조체에서 각 성분을 출력하고자 하셨을때 아래와 같은 코드를 많이 쓰셨을꺼에요. #include using namespace std; struct Point { int x{ 10 }; int y{ 10 }; }; int main() .. 2022. 2. 11.
VS2019 헤더 소스 전환 단축키 + 유용한 단축키 모음, Visual Assit 없이 하는 방법 VS2019 헤더 소스 전환 단축키 + 유용한 단축키 모음, Visual Assit 없이 하는 방법 요즘 cpp 코딩을 좀 할 일이 있어서 Visual Studio 2019를 좀 만져보고 있습니다. 클래스 파일. h. cpp 생성하고 이런저런 코딩을 하다 보니 서로 옮겨가면서 코딩할 일이 생겼는데요, 인터넷을 검색해봐도 단축키가 안 나오던 와중에 찾아서 기록차 남겨둡니다. 쌩 VS2019 내용입니다. Visual Assit 내용 아닙니다. 요즘 VS가 많이 발전해서 VA가 지원하던 내용들 찾아보면 거의 다 됩니다. 안된다 싶은 것도 커스텀하게 다 지원합니다 라고 하더라고요 해더 소스 전환, .h .cpp 전환 Ctrl + k + o 요것만 남겨 놓고 그러니, 제가 자주 사용하는 단축키들도 남겨봅니다. 유.. 2021. 8. 21.
CPP 초급 강좌 30. explicit 생성자 CPP 초급 강좌 30. explicit 생성자 explicit 생성자에 대해 봅시다. 다음 코드를 볼까요. class MyNumber{ private: int value; public: MyNumber(int value) { this->value = value; } }; int main() { MyNumber n1(1); //a MyNumber n2 = 2; //b } 간단하게 숫자 하나를 저장하는 클래스를 만들었고, main에서 객체를 생성합니다. a n1의 경우는 n1(1); 이란 코드로 직접 초기화를 합니다. direct initialization b n2는 =을 사용하여 복사 초기화를 합니다. copy initalization 이제는 MyNumber을 인자로 사용하는 함수가 있다면, 다음 코드가.. 2020. 11. 12.
CPP 초급 강좌 29. 맴버 초기화 리스트 member initializer lists CPP 초급 강좌 29. 맴버 초기화 리스트 member initializer lists 클래스의 맴버를 초기화하는 코드를 알아봅시다. 다음 코드를 볼까요. class Point { private: int x, y; public: Point(int a, int b) { x = a; y = b; } }; int main() { Point p(1, 2); } Point란 클래스를 만들고 인자로 x, y가 있습니다. 이 값은 main에서 객체를 생성할 때, p(1, 2); 코드로 인자 2개의 생성자를 호출하며 내부 값을 초기화시키죠. 하지만 위의 행위의 정확한 표현은 초기화가 아닙니다. 대입입니다. 생성자 호출 시 클래스 멤버에 대한 초기화 문법이 따로 존재합니다. 아래를 봅시다. Point(int a, in.. 2020. 11. 10.
CPP 초급 강좌 28. 생성자 constructor CPP 초급 강좌 28. 생성자 constructor 이전에도 생성자에 대해 보았지만, 조금 더 자세히 보겠습니다. 아래 소스를 봅시다. class Point { private: int x, y; public: Point() { x = y = 0; } Point(int x, int y) { this->x = x; this->y = y; } }; int main() { Point p1; Point p2(0, 0); } Point 클래스를 제작하고 생성자 인자 없는 버전과 인자가 둘인 버전을 제작하였습니다. 그리고 main 함수에서 둘을 호출하죠. 생성자 또한 오버로딩이 가능합니다. 위는 문제없는 코드입니다. 위의 코드에서 Point() { x = y = 0; } 생성자 코드를 제거한다고 가정하여 봅시다. .. 2020. 11. 9.
CPP 초급 강좌 27. 접근지정자, 캡슐화, friend 함수 CPP 초급 강좌 27. 접근지정자, 캡슐화, friend 함수 앞에서 접근 지정자에 대한 언급이 조금 있었다. 이번에는 관련 내용을 조금 더 알아보자. 코드를 봅시다. #include #include using namespace std; class UserInfo { public: string name = ""; int age = 0; }; int main() { UserInfo newUserInfo; newUserInfo.name = "신림83"; newUserInfo.age = 83; } 유저 정보를 저장하기 위한 클래스를 선언하고, 유저 정보를 입력해 봅니다. 큰 문제가 없습니다. 하지만 실수로, 다음과 같이 코딩하면 어떻게 될까요? newUserInfo.age = -83; 불가능한 일이 아닙니다.. 2020. 11. 6.
CPP 초급 강좌 26. 객체 와 객체지향 프로그래밍 이란? CPP 초급 강좌 26. 객체와 객체지향 프로그래밍 이란? cpp, c++ 하면 가장 먼저 많이들 하는 말이 오 그거 객체 지향 프로그래밍 언어,라고 많이들 들어보셨을 겁니다. 그러면 객체는 뭐고, 객체지향 프로그래밍은 또 뭘까요? 아래 코드를 좀 보죠. #include #include #include #include using namespace std; int main() { int i = 0; //a0 float f = 0; //b0 char c = 'a'; //c0 std::vector vector; //a1 std::stack stack; //b1 std::list list; //c1 vector.push_back(0); vector.push_back(1); vector.push_back(2); .. 2020. 11. 5.
CPP 초급 강좌 25. 객체지향 프로그램밍 클래스, 생성자, 소멸자, 파일분할, 클래스 탬플릿 CPP 초급 강좌 25. 객체지향 프로그램밍 클래스, 생성자, 소멸자, 파일 분할, 클래스 탬플릿 23강에서 본 지식을 기억하며, 간단한 스택 자료형을 struct로 구현해 보았다. #include using namespace std; struct Stack { private: int data[10]; int index; public : void init() { index = 0; } void push(int value) { data[index++] = value; } int pop() { return data[--index]; } }; int main() { Stack myStack; myStack.init(); myStack.push(10); cout 2020. 11. 4.
CPP 초급 강좌 24. 객체지향 프로그램밍 객체화, 접근 지정자 맛보기 CPP 초급 강좌 24. 객체지향 프로그램밍 객체화, 접근 지정자 맛보기 c++을 공부하시면서 객체, 객체지향 이런 용어를 참 많이 접하실 겁니다. C 스타일 코드를 C++ 객체지향 쪽 코드로 수정해 가보며 알아보아요. 특정 기간을 일로만 산출하는 코드 특정 기간에 대한 정보를 관리하려고 한다고 해보아요 아래 코드를 봅시다. #include using namespace std; int periodYear = 0; int periodMonth = 0; int periodDay = 0; int GetOnlyDay(int year, int month, int day) { return year * 365 + month * 30 + day; } int main() { int periodYear = 1; int p.. 2020. 11. 3.
CPP 초급 강좌 23. C++ 동적메모리 사용(new, delete, delete[]), nullptr CPP 초급 강좌 23. C++ 동적메모리 사용(new, delete, delete[]), nullptr 동적메모리 c++ 에서 동적 메모리를 사용하는 방법에 대해 봅시다. 먼저 c 에서의 메모리 할당 코드를 봅시다. 현제 c++에서도 사용할 수도 있는 코드입니다. int* p = (int*)malloc(sizeof(int) * 10); free(p); malloc로 할당하고, free 로 해지합니다. 해당 코드는 int * 10의 메모리 영역을 할당합니다. 40byte 기본적으로 malloc 는 void* 형이 반환타입입니다. 원하는 형식으로 다시 캐스팅(int*) 을 하여 사용하여야 합니다. c++ 프로젝트 에서도 아직 많이들 사용하고 있는 코드입니다. 필요할 경우도 분명 많구요. 그럼 이번에는 c+.. 2020. 11. 2.
CPP 초급 강좌 22. C++ Explict type conversion(casting) CPP 초급 강좌 22. C++ Explict type conversion(casting) c++ 에서의 명시적 형 변환에 대해 적어보겠습니다. 코드를 봅시다. int* p = malloc(sizeof(int) * 100); int* p에 인트 100개의 매모리 공간을 할당하는 코드입니다. 해당 코드는 정상 동적하지 않습니다. 왜냐하면 malloc 의 반환형이 void* 이기 때문이죠. c 스타일 코딩이라면 다음과 같이 처리할 수 있습니다. int* p = (int*)malloc(sizeof(int) * 100); 반환 타입인 void*를 int* 로 명시적으로 형변환을 하여 사용할 수 있습니다. 정상동작하고 문제없는 코드입니다. 이를 그대로 사용해도 되겠지만, c++에서는 이와 다른 명시적 형변환들을 .. 2020. 11. 1.
CPP 초급 강좌 21. C++ reference return, rvalue reference && CPP 초급 강좌 21. C++ reference return, rvalue reference && 이전 글에서 call by value, call by reference 에 대하여 (함수인자 사용을 통해) 살펴본 적이 있는데요, 관련링크 CPP 초급 강좌 19. C++ 레퍼런스 reference CPP 초급 강좌 19. C++ 레퍼런스 reference 레퍼런스에 대해 알아보겠습니다. C++에서 레퍼런스란 무엇인가를 알기 위해 기존의 변수 라는 표현이 뭔가를 정리해 볼까요? 변수 메모리의 특정 위치를 sillim83.tistory.com 이번에는 reference return 에 대해 보겠습니다. return by value 아래 코드를 볼까요. class Point { public: float x =.. 2020. 10. 31.