언어/Effective C++

[Effective C++] #10 대입 연산자와 *this의 참조자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 10 "대입 연산자는 *this의 참조자를 반환하게 하자"에 해당하는 내용입니다. 대입 연산자 대입연산자 = { =, *=, /=, %=, +=, -=, =, &=, ^=, |= } class A { public: ... A& operator=(const A& 우변객체){ ... return *this; } }; 대입 연산자는 위 코드에서 살펴본 대로, "= *= /= %= += -= = &= ^= |="를 의미합니다. "="의 경우 단순 할당 연산자로..
[Effective C++] #9 가상 함수를 호출하는 생성자, 소멸자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 9 "객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자"에 해당하는 내용입니다. 생성자 내부의 가상 함수 class 기본클래스 { public: 기본클래스 (); virtual void 가상함수 () const = 0; ... }; 기본클래스::기본클래스 () { 가상함수 (); } class 파생클래스: public 기본클래스 { public: virtual void 가상함수 () const; ... }; // 파생클래스 객체 생성 ..
[Effective C++] #8 소멸자가 던지는 예외 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 8 "예외가 소멸자를 떠나지 못하도록 붙들어 놓자"에 해당하는 내용입니다. 예외를 던지는 소멸자 class DB연결 { public: ... static DB연결 create();// DBConnection 객체 반환 함수 void close();// DB연결을 끊는 함수 }; class DB연결_관리 { publlic: ... ~DB연결_관리(){//소멸자 안에서 호출하는 close 함수 db.close();// 또는 소멸자 안에서 예외를 던지는 함수 } priva..
[Effective C++] #7 기본 클래스와 가상 소멸자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 7 "다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자"에 해당하는 내용입니다. 가상 소멸자 virtual ~Class_Name( ) {...} "소멸자"란 객체의 소멸 시점에 자원을 정상적으로 해제하기 위해 호출하는 함수입니다. 이 소멸자를 "virtual" 키워드와 함께 사용하는 것을 "가상 소멸자"라고 합니다. "가상 소멸자"는 호출될 때, 다형성을 지원하는 기본 클래스를 상속받는 자식 클래스의 소멸자를 호출 한 뒤에 부모 클래스의 소..
[Effective C++] #6 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 6 "컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 막아 버리자"에 해당하는 내용입니다. 사용자 정의 멤버 함수 class Assets {...}; Assets h1; Assets h2; Assets h3 (h1); Assets h3 = h2; 세상에 모든 자산은 한 개씩 존재한다고 가정해봅시다. 각 자산마다 "Assets" 클래스를 통해 생성되며, 생성된 객체들은 서로 같을 수 없습니다. 따라서, 위 예제 코드처럼 "h3"..
[Effective C++] # 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 5 "C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자"에 해당하는 내용입니다. 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 class Empty {}; 위 예제 코드는 비어 있는 클래스를 정의했습니다. 하지만, C++는 비어 있는 클래스 안에 몇 개의 멤버 함수를 자동으로 생성합니다. 이 멤버 함수들은 "생성자", "소멸자", "복사 생성자", 그리고 "복사 대입 연산자"입니다. 이들은 모두 public 멤버이며, inl..
[Effective C++] #4 객체의 초기화 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 1장 'C++ 기본', 항목 4 "객체를 사용하기 전에 반드시 그 객체를 초기화하자"에 해당하는 내용입니다. 초기화 int x; double x; class Point {...}; Point p; ********************* int x = 0; double x = 0; 위 예제 코드를 살펴보겠습니다. C++의 경우, 어떤 상황에서는 변수의 값이 초기화되기도, 그렇지 않기도 합니다. 대부분의 경우, 무작위 비트의 값을 읽어 객체의 내부가 알 수 없는 이상한 값을 갖게 되죠. C++의 vector의 원소는 확실히 ..
[Effective C++] #3_const 사용 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 1장 'C++ 기본', 항목 3 "낌새만 보이면 const를 들이대 보자!"에 해당하는 내용입니다. #0. const의 정의 char sayHello[] = "Hello!"; const char *p = sayHello;//포인터가 가리키는 데이터를 상수화 char* const p = sayHello;//포인터가 상수화 const char* const p = sayHello;// 둘 다 상수화 "const" 키워드가 붙은 객체는 외부 변경을 불가능하게 합니다. 따라서, 객체의 내용이 불변이어야 한다는 소스코드 제작자의 ..
[Effective C++] #2_#define 사용의 대안 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 1장 'C++ 기본', 항목 2 "#define을 쓰려거든, const, enum, inline을 떠올리자"에 해당하는 내용입니다. 1. #define, 매크로 const, 상수 #define ASPECT_RATIO 1.653 const double AspectRatio = 1.653; "#define" 사용의 경우 소스코드가 컴파일러에게 넘어가기 전, 선행 처리자가 "이름"을 밀어버리고, 숫자 상수로 바꾸어버립니다. 결과적으로, "ASPECT_RATIO"는 컴파일러가 사용하는 기호 테이블에 들어가지 않습니다..
[Effective C++] #33_오버 라이딩 문제 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 '상속 그리고 객체 지향 설계', 항목 33 "상속된 이름을 숨기는 일은 피하자"에 해당하는 내용입니다. 유효 범위, Scope int x; void someFunc() { double x; std::cin >> x; } 먼저, 유효범위에 대해 알아보겠습니다. std::cin을 실행하여 값을 입력받을 "x"변수는 가장 위에 선언한 "int x"일까요, someFunc 함수 내부에 선언된 "double x"일까요? 답은 지역 변수 "double x"입니다. 이유는 안쪽 유효범위, 즉 "void someFunc(..
Hardii2
'언어/Effective C++' 카테고리의 글 목록 (3 Page)