본문 바로가기

C++4

[C++] 깊은 복사(Deep Copy)와 얕은 복사 (Shallow Copy), 복사 생성자 인트로 깊은 복사와 얕은 복사를 학습하기 전에 알아두면 좋은 지식은 복사 생성자(Copy Constructor)이다. 복사 생성자란 다른 객체로부터 값을 복사해서 새로운 객체를 초기화하는데 사용되는 생성자이다. 복사 생성자를 정의하지 않으면 컴파일러가 자동으로 만들어주며 기본적으로 자신과 동일한 타입의 객체에 대한 레퍼런스(&)를 인자로 받는 생성자이다. 보다 쉬운 이해를 위해 몇 가지 간단한 예제를 보자. 복사 생성자 : 얕은 복사 앞서 언급했듯 복사 생성자를 정의하지 않으면 컴파일러가 자동으로 생성해 준다. 다음 코드는 사용자 정의 복사 생성자로 s2 객체의 초기화가 이루어지는 과정을 보여준다. #include #include using namespace std; class Student { publ.. 2021. 10. 11.
[C++] 객체 생성 방법 두 가지 (+ Stack과 Heap) 인트로 C++에서 객체를 생성하는 두 가지 방법에 대해서 알아보려 한다. 결론부터 말하면 각각은 서로 다른 결과를 가져오는데 하나는 객체가 힙에 다른 하나는 스택에 할당된다. 객체 생성 코드 #include using namespace std; class Orange { private: int price; public : Orange(int price) { this->price = price; cout 2021. 9. 26.
[C, C++] Call by value, Call by reference 쉽게 이해하기 인트로 (본 포스팅은 포인터와 관련이 깊습니다.) 함수의 호출 방법은 대표적으로 Call by value(값에 의한 호출)와 Call by reference(참조에 의한 호출)가 있다. 함수 호출이란 말 그대로 정의된 함수를 호출하는 것으로 함수에 정의한 매개변수의 형태에 따라 Call by value 혹은 Call by reference인지 결정된다. 참고로 이 둘의 차이를 쉽게 이해하려면 포인터와 Stack을 어느 정도 알고 있어야 한다. Call by value Call by value란 함수 호출 시 넘기는 인자의 값이 매개변수에 복사(Copy)돼서 함수 내에서 매개변수에 직접적인 데이터 조작을 가해도 인자에 전혀 영향을 주지 않는 것이다. 여기서 값이란 주소 값이 아닌 그 자체로 유의미한 데이터.. 2021. 9. 11.
[C, C++] 배열(Array)은 포인터(Pointer)가 아니다! 인트로 배열을 포인터라고 알고 있거나 배열의 이름이 포인터 내지는 포인터 상수라고 알고 있는 경우가 많다. 하지만 놀랍게도 배열은 포인터가 아니다! 배열은 배열이고 포인터는 포인터일 뿐이다. 다만 대부분의 코드에서 배열의 이름이 포인터로 변환되기에 배열의 이름 = 포인터라고 알고 있는 것 같다. 배열을 포인터로 나타낼 수 있는 이유는 C와 C++의 암시적인 변환(Decay) 정책에 의해 가능한 일이다. Decay란? 암시적으로 배열이 포인터로 변환하는 과정에서 배열의 타입과 크기를 잃어버리는 것을 Decay라고 한다. 본 포스팅에선 Decay를 "변환"이란 단어로 대체했다. 배열과 포인터 여기 배열이 하나 있다. int arr[3]; arr은 3개의 Integer를 담을 수 있는 메모리 공간이 있다. 그.. 2021. 8. 26.
반응형