본문 바로가기

IT/C++(CPP)33

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.
CPP 초급 강좌 19. C++ 레퍼런스 reference CPP 초급 강좌 19. C++ 레퍼런스 reference 레퍼런스에 대해 알아보겠습니다. C++에서 레퍼런스란 무엇인가를 알기 위해 기존의 변수 라는 표현이 뭔가를 정리해 볼까요? 변수 메모리의 특정 위치를 가르치는 이름입니다. 코딩시 해당 메모리에 접근하기 위한 용도로 사용을 합니다. 그럼 레퍼런스는? 기존 변수에 또 다른 이름을 부여하는 것이라고 보면 됩니다. 코드를 보겠습니다. #include using namespace std; int main() { int n = 0; n = 10; int& r = n; //레퍼런스의 선언 r = 20; cout 2020. 10. 29.
CPP 초급 강좌 18. C++ if init, if constexpr, rang for CPP 초급 강좌 18. C++ if init, if constexpr, rang for if init C++17 부터 추가된 기능으로 조건문을 만들 때, 초기화 구문을 추가할 수 있게 되었다. 아래 코드를 보자. int f1() {return 0;} int main() { int n = f1(); if (n == 0) { //작업 } } 위 코드를 if init 적용을 해보자. int f1() {return 0;} int main() { if (int n = f1() ; n == 0) { //작업 } } 이와 같은 표현이 가능하다. 이런 표현이 어떤 이점이 있을까? int n = f1(); if 문 외부에 있다면, main 전역에서 변수가 생명력을 가지지만 if init을 통해 성성된 변수는 if문 안.. 2020. 10. 28.
CPP 초급 강좌 17. C++ 람다표현식 lambda expression CPP 초급 강좌 17. C++ 람다표현식 lambda expression 람다 표현식 lambda expression 을 봅시다. 아래 예제를 봅시다. int f1(int a) {return a + a;} int main() { [](int a) { return a + a; }; //a. [](int a) { return a + a; }(1); //b. } int f1(int a) {return a + a;} 함수를 람다를 통해 표현한다고 합시다. 반환형과 이름 int f1 -> [] 교체합니다. 그럼 a의 형태가 되는데 함수표현은 이것이 끝입니다. 호출하고 싶으면 뒤(인자)로 호출하시면 됩니다. b와 같은 형태로 적어주시면 해당 람다함수가 호출까지 됩니다. 일반적인 함수는 글로벌 스페이스에 만들고 함.. 2020. 10. 27.
CPP 초급 강좌 16. C++ constexpr function CPP 초급 강좌 16. C++ constexpr function c++11부터 사용 가능한 constexpr function을 보자. 이전에 constexpr에 대하여 공부했었다. 기억이 안나는 분들을 위해 아래 링크를 남겨두겠다. 컴파일 시간에 사용하는 상수라는 계념이었다. constexpr 무었? CPP 초급 강좌 9. C++ constexpr, const CPP 초급 강좌 9. C++ constexpr, const constexpr 에 대해 적어보겠습니다. constexpr c++11 부터 도입된 문법으로 컴파일 시간 상수를 만드는 새로운 키워드입니다. 해당 문법이 무었인지 왜 도입되었는지를 � sillim83.tistory.com constexpr function? 함수의 인자를 컴파일 시간에 .. 2020. 10. 26.
CPP 초급 강좌 15. C++ 후위 반환 타입 trailing return type CPP 초급 강좌 15. C++ 후위 반환 타입 trailing return type c++11 부터 후위반환 타입 이라는 표현법이 생겼습니다. // int f1(int a) // auto f1(int a) -> int auto f1(int a) -> int { return a + a; } int main() { f1(0); } 맨 위의 주석 두 줄은 완전 같은 형식의 표현입니다. 우리에게 익숙한 방식은 아무래도 int f1(int a) 형식이겠죠. 이것을 다음과 같이 auto f1(int a) -> int라고도 표현할 수 있습니다. 함수 앞에 리턴타입을 지우고, auto를 쓰시고, 뒤에 -> 반환 타입을 표기하는 것입니다. 이러한 표현방식을 후위 반환 타입 표현 방식이라 하고, trailing retu.. 2020. 10. 25.
CPP 초급 강좌 14. C++ 함수삭제, delete function 사용이유? CPP 초급 강좌 14. C++ 함수삭제, delete function 사용 이유? 함수를 명시적으로 삭제하는 기능인 함수삭제 delete function에 대해 보겠습니다. c++11 부터 지원하는 기능입니다. 함수삭제 function delete 예제부터 void f1(int) = delete; //a int main() { f1(0); //b } 사용방법은 크게 별 다른 것이 없습니다. a와 같이 삭제하려는 함수 뒤에 = delete; 라 표시해주시면 됩니다. 컴파일 시 에러를 호출합니다. 이걸 보고 이런 걸 왜 사용하는 거지 라고 생각하실 수 있는데, 필요성이 있습니다. 함수 인자의 암시적 형 변환을 통한 호출 방지 다음 예제를 보겠습니다. int f1(int a, int b) { return a.. 2020. 10. 24.
CPP 초급 강좌 13. C++ 템플릿 기초, template CPP 초급 강좌 13. C++ 템플릿 기초, template 이번에는 템플릿 이전의 함수 오버로딩 function overloading 에서 함수 이름이 같아도 파라매타 등이 차이점이 있으면 작성이 가능함을 배웠었다. 먼저 함수 템플릿(function template) 다음과 같은 코드를 보자. int f1(int a) //a { return a; } float f1(float a) //b { return a; } int main() { f1(0); f1(0.0f); } 함수 오버로딩 기능을 사용해 두 함수를 작성했다. a, b를 비교해 보면 각 함수는 반환타입과 파라매타의 형태가 같고, a, b는 그 둘만 서로 다르고 본문 내용도 똑같다. 이럴 경우에 템플릿을 사용하면 좋다. 템플릿이란? 타입만 다르.. 2020. 10. 23.
CPP 초급 강좌 12. C++ 함수 오버로딩 function overloading 사용법, 주의사항 CPP 초급 강좌 12. C++ 함수 오버로딩 function overloading 사용법, 주의사항 함수 오버로딩(function overloading) 동일한 이름을 함수를 여러개 만들 수 있는 기능 단, 인자의 개수, 인자의 타입이 달라야 한다. 사용자 입장에서는 동일 함수처럼 사용할수 있어 좋다. 이게 당연한 거지라고 생각하실지도 모르겠지만, C언어는 안 되는 기능이다. 예제 코드 void f1(int p1) {}; void f1(int p1, int p2) {}; void f1(int p1, int p2, int p3) {}; void f1(float p1) {}; int main() { f1(0); f1(0,0); f1(0,0,0); f1(0.0f); } 주의사항 디폴트 파라미터와 같이 사용할.. 2020. 10. 22.
CPP 초급 강좌 11. C++ default parameter 사용과 주의사항 CPP 초급 강좌 11. C++ default parameter 사용과 주의사항 default parameter 디폴트 파라매타라고 부른다. 함수 호출 시 인자를 전달하지 않으면 미리 지정된 인자 값을 사용하도록 하는 문법 학원에서 학생 등록을 한다고 하자. 이름과 전화번호를 등록하길 원하는데, 등록하지 않길 원하는 학생은 등록을 하지 않아도 된다고 가정하다. #include #include using namespace std; void add(string name, string number) { //~~ 구현 구현 } int main() { add("개똥이", "123123"); add("말똥이", "123123"); add("소똥이", "123123"); } add란 함수에 인자로 이름과 전번을 넣게.. 2020. 10. 21.
CPP 초급 강좌 10. C++ string CPP 초급 강좌 10. C++ string cpp가 지원하는 문자형 클래스 string에 대해 적어보자. 문자처리... 참 복잡하고 까다로운 부분이다. 가장 기본적인 내용들에 대해 여기서 적어본다. cpp로 프로젝트를 진행한다고 해다, 이미 내부에 char형과 c 스타일을 문자처리 그리고 string 클래스를 혼용해서 사용하는 아름다운 프로젝트들이 많다. 그러므로 일단 c 스타일은 문자처리 코드를 좀 보자. c 스타일을 문자열 처리 코드 #include using namespace std; int main() { char s1[256] = "안녕"; const char* s2 = "HELLO"; s1 = s2; //a if (s1 == s2) //b { cout 2020. 10. 15.
CPP 초급 강좌 9. C++ constexpr, const CPP 초급 강좌 9. C++ constexpr, const constexpr 에 대해 적어보겠습니다. constexpr c++11 부터 도입된 문법으로 컴파일 시간 상수를 만드는 새로운 키워드입니다. 해당 문법이 무었인지 왜 도입되었는지를 아시려면 일단 const에 대한 이야기부터 해야 합니다. const const 키워드는 함께 정의한 변수의 값이 수정이 불가능하다고 보시면 됩니다. constexpr 역시 해당 기능을 가지고 있습니다. int main() { const int n1 = 0; n1 = 10; //error 불가능 constexpr int n2 = 0; n2 = 10; //error 불가능 } 실행시간시 해당 변수에 접근하여, 값 수정이 불가합니다. 다음 문법부터는 약간 아리송한 요소가 .. 2020. 10. 14.