반응형 C++146 C++ inline 함수란? inline 함수는 C++의 실행 속도 개선을 위해 등장 했습니다. C++에서는 기본적으로 클래스 선언을 통한 맴버함수가 많이 이용되는데, 이러한 경우 보통 간단한 기능을 하는 함수들이 많이 만들어지게 됩니다. 생성자, getter(), setter(), print() 등 과같은 간단한 함수들 말이죠. 함수들이 간결하여 실행속도에 영향을 끼지지 않을 것 같지만 함수 호출 과정에서 프로그램 속도가 떨어지게 됩니다. 함수의 호출은 다음과 같이 진행됩니다. ※찾아보니 중간에 레지스터에도 값이 저장되는데 어떤 값이 무슨 이유로 저장되는지는 저도 잘 몰라서 일단 제외했습니다. 코드로 보면 다음과 같습니다. #include int fnc_1(int a, int b){ //매개변수 스택에 저장 return a + b.. 2019. 7. 13. C++ Lambda 사용 이유와 사용 방법 C++에는 lambda라는 문법이 존제합니다. 원래 이 lambda는 boost라는 라이브러리에서 제공하는 함수였지만 지금은 modern c++로 넘어가면서 이 기능을 기본적으로 지원하게 되었습니다. (현재 modern c++은 C++ 20 까지 나왔습니다.) 출처 : https://modoocode.com/196 ● [] 캡쳐 블록 (사용시 외부 변수를 캡쳐해 람다 몸통에서 사용 가능) ● () 전달 인자 ● -> 반환 타입 ● {} 함수 몸통 (※Lambda는 기본적으로 캡쳐 블록'[]', 전달인자 '()', return type을 생략할 수 있습니다.) 참...... 어려워 보이고 이런 기능이 왜 있는지 감이 안잡히고... 고통 스럽습니다..... 우선!! 이 lambda 라는 문법이 왜 필요한지 .. 2019. 7. 1. C++ 변수 형 타입 auto C++로 변수를 선언할 때 보통 자료형을 선언해 줍니다. int a = 10; double b = 5.12; char c[] = "hello"; 이런식으로 말이죠. 하지만 요즘 개정된 modern c++이나 boost 를 사용 할 시 다음 키워드를 사용할 수 있습니다. 바로 auto 이죠. auto 키워드는 따로 자료형을 지정해 주지 않아도 '변수 초기 값'에 따라 자동으로 자료형 타입이 결정됩니다. int main(void) { auto a1 = 10; auto a2 = 5.41; auto s = "hello"; cout 2019. 7. 1. C++로 Restful서버 만들기(casablanca) 2. Server Sample Code 이번엔 GET을 통해 서버로부터 간단한 메시지를 얻어오는 TEST를 해보겠습니다. 우선 아래는 Sample Code 입니다. #include #include using namespace std; using namespace web::http; using namespace web::http::experimental::listener; int main(){ http_listener listener(U("http://localhost:9090")); //Server URL, Port 지정. listener.open().then([&listener](){cout 2019. 5. 28. C++로 Restful서버 만들기(casablanca) 1. 셋팅 및 설치 C++로 카사블랑카(casablanca) SDK를 이용해 Restful 웹 서버를 만들어 볼까 합니다. 우선 개발 환경부터 말씀드리겠습니다. OS : Linux(Ubuntu 18.04)개발 툴 : vim컴파일러 : g++(7.4) 우선 라이브러리를 설치해야 하는데, C++의 Restful SDK를 설치해야 합니다. MS에서 현재 제공하고 있는 casablanca를 사용할 것이며, 계속해서 업데이트가 진행되고 있는 MS의 프로젝트 SDK입니다. 현재 github에 올라와 있으며 https://github.com/microsoft/cpprestsdk에서 올라와 있습니다. 설치 방법은 이렇습니다. 우선 git을 설치해야 합니다. ---------------------------------------------.. 2019. 5. 28. C++ 템플릿 클래스 템플릿은 클래스에서도 적용이 가능 합니다. #include using namespace std; template class Calculator{ private: T x, y; public : Calculator(T n1, T n2) : x(n1), y(n2) {} T Adder(){ return x + y; } }; int main(void){ Calculator cal1(10, 20); Calculator cal2(1.5, 20.99999); cout 2019. 5. 17. C++, const란?, 사용법! C, C++에서 const란 상수 라는 의미입니다. 즉, 변수, 함수, 객체, 포인터 등.... 을 상수화 시킬 수 있는 키워드 입니다. 그럼 상수란?? 데이터의 초기화가 이뤄지면 그 값을 바꿀 수 없도록 해 주는 것입니다. 선언 시 const 변수는 데이터 영역에 들어가게 되며 컴파일과 동시에 데이터 영역 메모리로 올라가 버립니다. 따라서 일반적으론 값의 변경이 이뤄나선 안되는 경우 주로 사용하게 됩니다. 사용 예제를 보도록 하겠습니다. #include #include using namespace std; class A { private: int num; string name; public: A() {} A(int num, string name) { this->num = num; this->name =.. 2019. 3. 12. C++, friend 사용법. C++ 에선 friend 라는 키워드가 존재합니다. friend를 선언하게 되면 private 맴버 변수의 접근이 가능해 집니다. 예제를 보면.... #include #include using namespace std; //class B; class A { private: int num; string name; friend class B; public: A() {} A(int num, string name) { this->num = num; this->name = name; } }; class B { A *a; public: void createA() { a = new A(10, "haha"); } int sum() { return a->num + 10; } void fix_Name(string name.. 2019. 3. 11. C++ virtual 함수란? ※해당 글의 내용이 다소 부족하다 생각하여 다시 정리해서 글을 썻습니다. https://hwan-shell.tistory.com/225 부족하다 느끼시는 분들은 참고해 주세요!! virtual(가상함수)에 들어가기 앞서 두 개념을 짚고 넘어가야 합니다. 흔히 상속관계에서 오버라이딩을 하게되면 자식 클래스가 부모 클래스의 함수를 가리는 형태가 되어 자식 클래스의 함수가 호출되게 하는것이 오버라이딩입니다. 즉, 오버라이딩은 함수의 재정의 라고 판단하시면 됩니다. 형변환이란 데이터의 형태가 다르더라도 해당 형태에 따라 바꿔주는 것을 말합니다. 아래 예시를 보면...... #include using namespace std; int main(void){ int num = 0; double dou = 10.4; .. 2019. 3. 11. C++ 오버라이딩?? 이건 또 뭘까? C++에서 오버라이딩 이라는 개념이 존재 합니다. 오버라이딩은 상속관계에 있을 때 나타나는 기능인데, 오버로딩과는 다르게!! 함수의 반환 값, 매개변수, 이름 모두 동일해야 합니다. 그럼 도대체 왜 사용하느냐? 이유가 뭐냐? 그것은 바로 virtual기능을 사용할 때 진가가 발휘 되는데 이것에 대해선 나중에 설명하도록 하겠습니다. 우선 중요한 것은 이걸 정의하는 방법과 활용에 대해 알아 두는 것입니다. 우선 정의 방법은 이렇습니다. #include using namespace std; class A { int num = 10; public: void show_Pt() { cout 2019. 3. 4. C++ 오버로딩? 그게 뭘까? 오버로딩이란? 객체지향 언어의 특성 중 하나로 같은 이름의 함수를 여러 개 만들 수 있는걸 말합니다. 단!! 조건이 있는데 ※매개 변수를 무조건 다르게 정해줘야 하는 것입니다. 예시를 통해 확인해 보도록 하겠습니다. 정상적인 오버로딩. #include using namespace std; void fct_1(void) { cout 2019. 3. 4. C++ 복사 생성자, 왜 그렇게 생겼냐? 복사생성자를 보면 이렇습니다. 클래스 이름 (const 클래스 이름 &참조변수) 즉, 상수로 선언된 참조자이며 type은 클래스(자기자신)이 되는 것입니다. 복사 생성자 자체는 원래 기존 값을 복사해 전달해주는 개념이라 이 과정에서 값이 바뀌어선 안됩니다.(복사인데 값이 바뀌게 된다면 복사가 아니겠죠?) 따라서 const로 선언된 것이고 정의되어 있습니다. 그렇다면 왜 참조자로 받느냐 인데......... 이걸 이해 하려면 우선 복사 생성자의 호출을 알아야 합니다. 복사생성자가 호출될 때는 1. 대입연산을 할 때 2. 매개 변수로 들어갈 때 3. 반환 값이 있을 때 즉, #include #include using namespace std; class A { int num; string name; publ.. 2019. 2. 24. C++ 복사 생성자란? 얕은복사와 깊은복사 저희는 기본적으로 변수를 선언하고 데이터 값을 입력하는 과정을 다음과 같이 진행합니다. int num_1 = 10; int num_2 = num_1; 이런식으로 선언하는 것이 일반적입니다. 하지만 C++에서는 컴파일러가 다음과 같이 바꿔서 계산을 하게 됩니다. int num_1(10); // int num_1 = 10; int num_2(num_1); // int num_2 = num_1; 이렇게 보면 함수 안에 매개변수를 넣는 것 처럼 보입니다. 실제로도 비슷합니다. 즉, C++은 C와 다르게 int num_1 = 10; 의 과정을 int num_1(10)으로 해석한다는 말입니다. 그렇다면 왜? 굳이? 이런식으로 바꿔 진행하느냐..... 바로 Class 때문입니다. Class를 선언한 후 사용하게 되면.. 2019. 2. 24. C++ 소멸자란? 소멸자란 객체의 사용이 끝나고 메모리의 반환될 때 자동으로 실행되는 코드를 말합니다. 생성자 처럼 사용자가 따로 선언을 하지 않으면 컴파일러가 컴파일시 자동으로 생성해줍니다. #include using namespace std; class A { int num; public: ~A() {} }; int main(void) { A a; return 0; } 이렇게 생겼습니다. '~' 로 시작하게 됩니다. 그럼 주로 어떨때 사용이 되느냐? #include using namespace std; class A { int * num; public: A() { num = new int[10]; } ~A() { delete num; } }; int main(void) { A a; return 0; } 이처럼 객채.. 2019. 2. 22. C++상속 관계에서의 생성자 호출 생성자는 객체를 만들게 되면 자동으로 실행되는 코드 입니다. 그럼, 상속관계에서의 생성자 호출은 어떤식으로 진행이 될지? 코드로 설명하겠습니다. #include using namespace std; class A { public: A() { cout 2019. 2. 21. 이전 1 ··· 6 7 8 9 10 다음 728x90 반응형