일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- delete function
- c++ multi chatting room
- increment operator
- std::vector
- member function pointer
- virtual inheritance
- virtual destructor
- pointer to member data
- return by reference
- c++ basic practice
- 더 지니어스 양면포커
- this call
- conversion constructor
- vector size
- operator overloading
- suffix return type
- std::ostream
- C++
- virtual function table
- diamond inheritance
- base from member
- std::cout
- placement new
- virtual function
- new&delete
- std::endl
- dynamic_cast
- vector capacity
- constructor
- discord bot
- Today
- Total
목록C++/Basic (37)
I'm FanJae.
1. 복사 초기화 과정의 문제점class Vector{public: Vector(int size){}};int main(){ // C++98 Vector v1(10); Vector v2 = 10; // C++11 Vector v3{10}; Vector v4 = {10}; v1 = 20;}- 위 예제는 인자가 한 개(int)인 생성자가 있는 타입의 객체로 총 4가지의 객체 생성 방법을 보인다.- 이 때, '='가 있으면 Copy Initialization(복사 초기화)가 되고 없으면, Direct Initialization(직접 초기화)가 된다. - 인자가 한 개인 생성자는 변환의 용도로도 사용이 가능하다.- 이를 변환 생성자(Conversion constructor)라..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 멤버 데이터를 초기화 하는 3가지 방법- 멤버 데이터를 초기화 하는 방법은 크게 3가지가 존재한다. ① 지금까지 사용한 방법class Point{ int x; int y;public: Point(int a, int b) { x = a; y = b; }};- 우리가 알고 있는 가장 일반적인 방법이다. ② Member initializer list (C++98)class Point{ int x; int y;public: Point(int a, int b) : x{a}, y{b} { }}; ③ Default member initializer (C++11)class P..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. - 배열의 단점은 크기를 변경할 수 없다는 것이다.- 크기를 변경하려면, 처음에 필요한 만큼의 메모리를 동적 할당해서 사용해야 한다. 1. 동적 배열(vector)의 구현- 메모리 동적 할당 기능을 활용해서, 크기 변경이 가능한 배열을 직접 생각해보자. 1-1. 기본적인 buffer의 생성 - 대략 이런식으로 할당을 한다고 생각하여, 코드를 작성하면 아래와 같다.#include int main(void){ int* buff = new int[5]; buff[0] = 1;} 1-2. 크기의 변동- 1은 넣은 뒤의 값은 이와 같을 것이다. 이제 이것의 '크기'를 변동한다고 생각해보는 것이다.- 사이즈를 10..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 생성자가 필요한 이유#include #include class Person{public: std::string name; int age;};int main(){ Person p = {"kim",25};}- struct와 class는 사용 방법이 유사하여, 위와 같이 사용은 가능하다.- 하지만 지난 시간 OOP 포스트에서 다뤘듯, 멤버 데이터를 외부에서 접근 시키는 행위는 다소 위험하다. ① 단계 1. 멤버 데이터를 private으로 수정한다.class Peson{private: std::string name; int age;};- 따라서, 보통 멤버 데이터는 private으로 설정한다. 문제는 이..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. OOP(Object Oriented Programming)에 대한 필요성 이 개념은 C++에서 가장 중요한 개념인 '객체 지향 프로그래밍'에 대한 이야기를 해보고자 한다.OOP의 기본적인 개념과, 접근 지정자(private,public), 캡슐화(Encapsulation) 에 대해서도 얘기하고자 한다. 먼저, 사각형을 그리고(draw), 넓이를 구하는 함수에 대해 생각해보자.#include int getRectArea(int x1, int y1, int x2, int y2){ return (x2-x1) * (y2-y1);} void drawRect(int x1, int y1, int x2, int y2){ ..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. C언어 캐스팅의 문제점 - Explicit Casting기본적으로, C언어의 캐스팅 방법과 C++ 언어의 캐스팅 방식에는 약간의 차이가 존재한다.int* p1 = (int *) malloc(sizeof(int)*10);int* p2 = static_cast(malloc(sizeof(int)*10));- C++ 언어로 넘어오면서 아래 방법을 더 권장하기 시작했다. C 방식 캐스팅의 문제점#include #include int main(){ int* p1 = (int *)malloc(sizeof(int)*10); free(p1); int n = 10; double* p2 = &n; *p2..
1. nullptr- '0'은 원래 정수(int)형 literal(리터럴)이다.- 이는 포인터 변수 초기화에 사용될 수 있다.- 0이 아닌 다른 정수형 literal은 포인터로 암시적 변환이 될 수 없다.- 0을 가진 정수형 변수도 포인터로 암시적 형변환이 될 수 없다. int n1 = 0;int* p1 = 0;int* p2 = n1; // error nullptr // C++11- null pointer를 나타내는 literal- 모든 종류(타입)의 포인터 변수를 초기화 하는데 사용 가능- 정수(실수) 초기화에 사용될 수는 없다.int* p4 = nullptr;int n2 = nullptr; // error 1-1. nullptr의 등장배경- 컴파일러마다 조금 차이는 있지만, 일반적으로 C와 C++..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. Reference(참조) 1-1. Reference의 정의#include int main(){ int n = 10; int* p = &n; int& r = n; r = 20; std::cout - C 언어에서는 변수의 주소값을 담을 수 있는 Pointer라는 것이 있다.- C++에서는 포인터와 유사한 형태의 Reference라는 기능이 존재한다. (유사한 것이 결코 같은게 아니다.)- 포인터 변수를 선언하는 것처럼 다음과 같이 선언이 가능하다.int &r = n; - Reference란, 이미 존재하는 변수(메모리)에 대한 추가적인 별칭을 부여하는 문법이다.- 기존 포..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. - C++에서 새롭게 추가된 for문이 존재한다.1. range for 1-1. std::size() // C++ 17일반적으로, for를 사용할 때, 배열의 크기가 바뀌면, for 안의 크기도 바뀌어야 했다.그때 C 언어에서 가장 많이 사용한 방식이 아래 방식이다.#include int main(void){ int x[10] = {1,2,3,4,5,6,7,8,9,10}; for (int i = 0; i C++에서는 std::size 라는 것이 존재한다.#include int main(void){ int x[10] = {1,2,3,4,5,6,7,8,9,10}; for (int i = 0..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. Suffix Return type(후위 반환 타입)int add1(int a, int b) // Type A. 일반적인 함수{ return a+b;}auto add2(int a, int b) -> int // Type B. 반환 값인 int가 후위에 표기되어있다.{ return a+b;}- Type A가 지금까지 사용되었던, 일반적인 함수의 형태이다.- C++11에서 부터 새롭게 등장한 함수의 표기법으로, 함수의 반환 타입을 함수의 () 뒤쪽에 적는 표기법이다.※ 즉, 기존 함수의 표기법은 반환 타입이 입력보다 앞쪽에 표기되었던 반면, Suffix Return type은 반환 타입이 입력 뒤쪽에 표기된다. ..