프로그래밍/C++
![[C++] 객체지향 프로그래밍의 개념(2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbs2rR0%2FbtqzmTOEqnV%2FAAAAAAAAAAAAAAAAAAAAAL092zxhW2TzFKgmGRduWbkaeBECASKVIVslxnExavMe%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D2bnHTuHs01mGWZtJUp7tpPR%252BVbs%253D)
[C++] 객체지향 프로그래밍의 개념(2)
1. 변수와 객체 (variable vs object) #include int main() { int n = 0; // 변수 n = 10; std::stack s; // 객체 s.push(10); s.push(20); int n2 = s.top(); s.pop(); } - 변수 (Variable) => 변하는 수 => 메모리의 특정 위치를 가르키는 이름 => 변수를 사용하면 메모리에 값을 읽거나 쓸 수 있다. => 언어가 제공하는 기본 타입(primitive type)의 인스턴스 - 객체 (Object) => 메모리를 할당하고 자신을 스스로 초기화 한다. => 상태와 동작을 가지고 있는 존재 => 객체를 사용하면 해당 객체가 제공하는 다양한 서비스를 사용할 수 있다. => 사용자 정의 타입(User De..
![[C++] 객체지향 프로그래밍의 개념(1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdhlcIx%2FbtqznufKhXm%2FAAAAAAAAAAAAAAAAAAAAAOOH1baWteztoeJ7O7nrfl5gZPtlKzU4zvuRBNZD4q3l%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D7c7LxcHD9%252Fnmm0WdfRnZKBiIMxs%253D)
[C++] 객체지향 프로그래밍의 개념(1)
1. 객체지향 프로그래밍(OOP : Object Oriented Programming) // 복소수 2개를 더하고 싶다. ? add(double ar, double ai, double br, double bi) { double sr = ar + br; double si = ai + bi; return ? } int main() { double xr = 1, xi = 1; // 1 + 1i double yr = 2, yi = 2; // 2 + 2i add(xr, xi, yr, yi); } 위의 코드는 복소수(실수+허수의 형태)를 더하는 코드이다. 위에서 add함수로 인자를 4개 넣고 결과 값을 받고 싶은데, 함수의 타입과 리턴은 어떻게 해야 할까? // 복소수 2개를 더하고 싶다. void add(doub..
![[C++] 동적 메모리 할당, nullptr](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdI3GRG%2Fbtqzj9Yy5kO%2FAAAAAAAAAAAAAAAAAAAAAIlYsnpKzo_nVUojWO7FS25Q5YJYpAyouuyKhxFzgTzv%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DPzhcsAlNuxOCe0ktiVVf195TZCY%253D)
[C++] 동적 메모리 할당, nullptr
1. 동적 메모리 할당 #include int main() { int* p1 = (int*)malloc(sizeof(int)*10); free(p1); // C언어에서의 메모리 할당 int* p2 = new int; // int 한 개, 4byte delete p2; // C++에서의 메모리 할당 int* p3 = new int[10]; delete[] p3; int* p4 = new int[10][2]; delete[] p4; } - C언어 => malloc으로 할당하고 free로 해지한다. => C언어에서는 캐스팅이 필요 없지만, C++에서 malloc사용시 반환되는 주소는 원하는 포인터 타입으로 캐스팅 해야 한다. - C++ => new로 할당하고 delete로 해지한다. => new가 반환한 주소..
![[C++] Explicit Casting](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FOFf1k%2Fbtqzjqc54vj%2FAAAAAAAAAAAAAAAAAAAAAD_PHsW0IUay3ji52b2o2gKhZMAOA3JhuKRAukOWbzmI%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D4eYZFZz5VwP8h4F9zpQwaWN5tbk%253D)
[C++] Explicit Casting
1. C++ Explicit Casting 개념 #include #include int main() { int* p1 = malloc(sizeof(int)*10); free(p1); } - 위의 코드를 살펴보면 malloc을 사용해 메모리를 할당하고 주소를 int포인터로 받았다. - 하지만 사실 malloc이 반환하는 데이터 타입은 void포인터이다. 이것을 int포인터에 담을 수 있는가? - 위의 표에 따라 C++에서는 암시적 변환이 허용되지 않아 컴파일 시 에러가 난다. - 그렇다면 왜 새로운 캐스팅이 필요할까? => C의 캐스팅은 논리적이지 않고, 위험하고, 버그의 가능성이 높다. 2. C언어 방식 캐스팅의 단점 #include int main() { int n = 0; //double* p1 = ..
![[C++] 레퍼런스(reference)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FB18nW%2FbtqzcKqiUn5%2FAAAAAAAAAAAAAAAAAAAAAGYdUSb7ltKwoS4JDSNaX0VH_JZhZ_JlCLNYjyr4TQKM%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DGqBtVXhbOogoNJwx1%252BDYFJYSERE%253D)
[C++] 레퍼런스(reference)
1. reference #include int main() { int n = 10; n = 20; int& r = n; // 레퍼런스 r = 30; // n = 30. n에 30을 넣은것과 같음 std::cout 하지만, 복사본에 대한 오버헤드가 있다. 2.2 인자의 값을 변경하지 못하는 함수를 만들려면 // void move(Date d) void move(Date& d) { d.year = 1000; } => 레퍼런스로 바꿔준다. => 하지만 레퍼런스로 받음으로써 원본의 값이 변경될 수 있다. void move(const Date& d) { // d.year = 1000; - error } => 이 때, const를 붙여주면 원본의 값을 바꿀 수 없게 된다. => 여기서는 값을 변경하기 위해 레퍼런스..
[C++] range for / if init / if constexpr
1. range for #include int main() { int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for(int n : x) { // x에서 하나를 꺼내서 n에다 담아주세요. std::cout