본문 바로가기

C++30

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.
c++, c# 의 소켓통신에 관하여, 문자열, 파일, 구조체 전송에 대하여 c++, c#의 소켓통신에 관하여, 문자열, 파일, 구조체 전송에 대하여 과거에는 프로젝트를 진행하면 서버, 클라간의 언어를 맞추는 경우가 많았습니다. 제가 게임 쪽에서 좀 일해서 cpp 서버에 cpp 클라 같은 경우는 많이 존재했죠. 하지만 클라, 서버의 다양성이 늘어남에 따라, 클라의 경우는 지원하는 엔진이 사용하는 언어, 서버의 경우는 웹서버, 소켓 서버, 작업자의 능숙도 등이 고려되어 서로 다른 언어로 작업된 작업물들이 통신을 해야 되는 경우가 많이 생기고 있습니다. 그중 c++, c#이 서로 통신을 하는 경우에 대해 좀 보려합니다. 코드 관련 이야기는 거의 안쓸 계획입니다. 예제 코드 관련해서는 링크해서 남겨두도록 하겠습니다. 크게는 닷넷 환경에 대한 이야기가 될 수도 있겠습니다. 문자열의 경우.. 2021. 7. 15.
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 초급 강좌 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.
CPP 초급 강좌 20. C++ const reference CPP 초급 강좌 20. C++ const reference 아래 코드를 먼저 봅시다. class Point { public: float x = 0.0f; float y = 0.0f; }; void f(Point p) { } int main() { Point p; f(p); } Point 란 클래스를 정의하고 생성하고 f 함수에 인자로 넘기는 코드입니다. f(p) 에서 인자로 넘어가는 순간에 대한 이야기 입니다. f(point p) 함수 안에서 p는 call by value에 의한 호출입니다. 즉 객체는 복사되어 존재합니다. 내부에서 p의 맴버들에 대한 x,y에 대한 수정이 가능하지만 이 x,y 값은 main 함수에서 인자로 넣었던 p값에 영향이 없습니다. 코드를 보죠. void f(Point p) { .. 2020. 10. 30.