본문 바로가기

C++

(29)
[C++] 연산자 함수와 operator 연산자 함수란? 연산자 함수는 연산자를 이용하듯 호출할 수 있는 메서드이다. 예를 들어 클래스에 대한 객체 a와 b가 있다면 b = a + 3; 은 문법상 오류이다. 하지만 사용자 관점에서 이러한 접근은 매우 직접적이고 알아보기 쉽다. 간단한 덧셈 예이다. #include using namespace std; class TestClass { public: TestClass() { cout
[C++] 이동 생성자와 이동 시맨틱(Move semantics) 이동 생성자란? 이름 없는 임시 객체가 생기는 것을 막을 수 없다. 그러나 무의미한 임시 객체의 생성은 프로그램의 효율을 떨어뜨린다. 이러한 문제 때문에 생긴 것이 이동 생성자이다. 임시 객체는 어차피 사라지는 객체이다. 깊은 복사를 수행할 필요 없이 얕은 복사를 수행함으로써 성능을 높일 수 있다. #include using namespace std; class TestClass { public: TestClass() { cout
[C++] operator 대입연산자 변수뿐만 아니라 클래스나 구조체에서도 단순 대입 연산이 이루어질 수 있다. #include using namespace std; class TestClass { public: TestClass() {} TestClass(int param) { num = new int; *num = param; } TestClass(const TestClass& ref) { num = new int; *num = *ref.num; } ~TestClass() { delete num; } int getNum() { return *num; } private: int *num = nullptr; }; int main() { TestClass a(10); TestClass b(20); a = b;//에러 cout
[C++] 변환 생성자의 묵시적 변환과 임시 객체 explicit 묵시적이란? "직접적으로 말이나 행동으로 드러내지 않고 은연중에 뜻을 나타내 보이는. 또는 그런 것." 매개변수가 한 개인 생성자를 '변환 생성자(Conversion constructor)'라고 하는데 C++에서는 변환 생성자에서 묵시적으로 형변환이 일어나는 경우가 있다. #include using namespace std; class TestClass { public: TestClass(int param) : num(param) { cout
[C++] 복사 생성자(copy constructor) 복사 생성자(copy constructor)란? 복사 생성자란 객체의 복사본을 생성할 때 호출되는 생성자이다. 복사 생성자도 생성자와 마찬가지로 정의하지 않으면 컴파일러가 자동으로 만들어준다. 복사 생성자의 형태는 다음과 같다. 클래스이름(const 클래스이름 &변수이름); 다음 예제는 복사 생성자를 사용하였고 생성자와 마찬가지로 멤버 변수를 초기화하였다. #include using namespace std; class TestClass { public: TestClass(int param) : num(param)//생성자 초기화 { cout
[C++] 메모리 동적 할당 new와 delete 연산자 C언어에서 malloc()과 free()가 있다면 C++문법에는 new와 delete 연사자가 있다. new와 delete는 C++에서 객체를 동적 할당하고 해제하는 연산자이다. 예는 다음과 같다. int *x = new int; delete x; 배열의 경우 다음과 같이 사용할 수 있다. int *y = new int[10]; delete[] y; new 연산자는 malloc() 함수와 달리 메모리 크기를 정하지 않아도 된다. #include using namespace std; int main() { //메모리 동적 할당과 초기화 int* pNew = new int(10); cout
[C++] 생성자와 소멸자 생성자와 소멸자는 클래스 객체가 생성 및 소멸될 때 자동으로 호출되는 함수이다. 생성자와 소멸자는 반환 형식이 없다는 것이 특징이다. //생성자 클래스이름(); //소멸자 ~클래스이름(); 소멸자는 생성자앞에 물결표시(tildar 틸다)로 표기한다. 생성자와 소멸자의 핵심내용은 다음과 같다. 생성자는 다중 정의할 수 있다. 소멸자는 다중 정의할 수 없다. 전역 변수로 클래스를 선언하면 main함수보다 먼저 호출된다. main함수가 끝난 후에 소멸자가 호출될 수 있다. 생성자와 소멸자를 기술하지 않으면 컴파일러가 자동으로 생성한다. 생성자와 소멸자의 호출 시기를 보자. #include using namespace std; class myClass { public: //생성자 myClass(int x) : ..
[C++] 참조자(Reference) C++에는 참조자라는 것이 있습니다. 참조자 형식은 C언어의 포인터와 비슷한 형식을 가집니다. 상수에는 포인터를 선언할 수 없는 것처럼 참조도 선언할 수 없습니다. #include using namespace std; int main() { int num = 10; int& ref = num;//참조자 선언 int* ptr = #//포인터 선언 ref = 100; cout