일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 예외
- 비교 함수 객체
- 상속
- c++
- reference
- 티스토리챌린지
- lua
- 영화 리뷰
- implicit conversion
- modern effective c++
- 함수 객체
- exception
- 게임
- virtual function
- 참조자
- 반복자
- UE4
- 언리얼
- 오블완
- 스마트 포인터
- 암시적 변환
- operator new
- 메타테이블
- 다형성
- effective stl
- more effective c++
- Effective c++
- resource management class
- 영화
- Smart Pointer
- Today
- Total
목록c++ (143)
스토리텔링 개발자
항목 6 : 증가 및 감소 연산자의 전위 / 후위 형태를 반드시 구분하자 ++, -- 연산자 오버로드 규칙의 필요성80년대 후반에는 전위, 후위 방식으로 호출하는 것을 구분할 방법이 없었다.그래서 해당 연산자의 전위 / 후위 형태를 오버로딩 할 수 있도록 스팩이 향상되었다.근데 오버로딩은 보통 매개변수의 타입에 따라 구분되는데?증감 연산자는 인자를 전혀 받지 않는다는 문제가 있다.그래서 아래의 규칙이 생겨났다. 증감 연산자의 오버로딩 규칙후위 형태는 int 타입의 인자를 받는다.증감 연산자가 후위로 호출될 때 컴파일러는 해당 인자로 0을 넘겨준다.전, 후위 형태는 서로 다른 타입을 반환한다.전위 형태참조자 타입을 리턴후위 형태const 객체 타입을 리턴class UPInt{public: UP..
항목 5. 사용자 정의 타입 변환 함수에 대한 주의를 놓지 말자 암시적 변환C처럼 C++ 역시 암시적 변환을 지원한다.예컨대 char -> int, short -> double 로 군소리 없이 변환시켜 준다.심지어 int -> short, double -> char 처럼 데이터 손상 여지가 있는 변환도 지원한다.raw 타입에 대해선 어쩔 수 없지만, 커스텀 타입에 대해서는 이 암시적 변환을 확실히 제어할 수 있다.암시적 타입 변환을 위해 컴파일러가 사용할 수 있는 함수를 제공하면 된다. 암시적 타입 변환 함수의 종류 1. 단일 인자 생성자(single-argument constructor)인자를 하나만 받아 호출하는 생성자를 말한다.하나의 매개변수만 받도록 선언.혹은 여러 매개변수이나, 처음 것을..
항목 4 : 쓸데 없는 기본 생성자는 그냥 두지 말자 기본 생성자아무런 인자도 받지 않고 호출될 수 있는 생성자외부 정보를 하나도 받지 않고 초기화를 한다는 의미이다.하지만, 외부 정보 없이는 완전한 초기화를 수행할 수 없는 경우도 있다.예를 들면 주소록의 입력 자료, 회사에서 관리하는 회사 장비의 ID 번호 등.그렇다면 이 경우엔 기본 생성자를 제공하지 않으면 될 것이나... 기본 생성자가 없는 클래스 제작 시 유의사항 세 가지// 아래 예제를 통해서 유의사항을 알아본다.// 회사 장비를 나타내는 클래스class EquipmentPiece{public: EquipmentPiece(int IDNumber); ...} 1. 배열을 생성할 때일반적으로 배열의 요소로 들어가는 객체에 대해..
항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다. 상속성이 주는 혜택기본 클래스 객체의 포인터나 참조자를 통해 파생 클래스 객체를 조작할 수 있다.즉, 다형성을 가지고 있다.파생 클래스 객체의 배열을 기본 클래스 포인터나 참조자를 통해 조작할 수 있다.하지만, 이게 정말 바랬던 일일까..? 기본 클래스 배열 대신 파생 클래스 배열을 사용하는 경우class BST { ... };class BalancedBST : public BST { ... };void printBSTArray(ostream& s, const BST array[], int numElements){ for(int i = 0 ; i 두 번째 printBSTArray는 미정의 결과이다. 배열과 포인터array[..
항목 2 : 가능한 C++ 스타일의 캐스트를 즐겨 쓰자. C 스타일 캐스트의 문제점타입을 다른 타입으로 제한 없이 바꾸어준다.어떤 객체의 상수성(copnstness)만을 바꾼다.기본 클래스 객체에 대한 포인터를 파생 클래스 객체에 대한 포인터로 바꾼다.위 둘은 전혀 다른 캐스트지만, C 스타일 캐스트는 이 모든 걸 별 말 없이 소화해버리기 때문에 위험하다.C 스타일 캐스트는 눈으로 찾아내기가 힘들다.식별자를 괄호로 둘러싼 것일 뿐이기 때문이다.int firstNumber, secondNumber;...// c 스타일 캐스트double result = ((double)firstNumber) / secondNumber;// c++ 스타일 캐스트// 인간의 눈이나 프로그램이나 발견하기 쉬운 캐스트doubl..
항목 1 : 포인터와 참조자를 구분하자 포인터와 참조자의 차이참조자 개념에선 '널 참조자(null reference)'라는 것이 없다. 즉,포인터 사용어떤 변수가 참조하는 부분에 객체가 없을 수도 있는 상황.참조자 사용어떤 변수가 가리키는 메모리가 항상 유효한 객체여야 하는 상황C++ 스펙에 의하면 참조자는 선언될 때 반드시 초기화해야 한다.// 참조자의 경우string& rs; // 컴파일 에러. 초기화가 없다.string s("xyzzy");string& rs = s; // 컴파일 성공.// 포인터의 경우string* ps; // 초기화 되지 않은 포인터. 컴파일 성공. 허나, 무슨 값이 들어있을지..참조자는 중간에 다른 객체를 참조하게 할 수 없다.포인터의 경우다른 객체의 주소값으로 얼마든지 바..
항목 55 : Boo자유친! 부스트를 늘 여러분 가까이에. 부스트란?C++ 개발자들의 단체이자 무료 다운로드가 가능한 C++ 라이브러리 집합을 동시에 일컫는 고유명사이다.차별점부스트는 C++ 표준화 위원회와 밀접하고 영향력 있는 밀월관계가 있다.표준 C++에 추가될 수 있는 기능들의 시험장소라는 의미이다.라이브러리 승인 과정이 까다롭다. 라이브러리 승인 과정 (공개 동료 심사(public peer review))사전 심사(perliminary examination)부스트 최소 요구사항 만족 여부 확인컴파일 되는 컴파일러가 최소 두개 이상일 것.라이센스가 적절한지 여부공식 심사설계와 구현이 얼마나 우수한가다른 컴파일러와 운영체제들에 맞추어 이식할 수 있는 코드인가대상 사용자들(특정 분야 종사자들)에..
항목 54 : TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자 C++ 차기 버전C++0x 라고 불렸지만, 실제로 반영되고 나서의 이름은 C++11.(모던 C++)TR1(C++ 라이브러리 작업 그룹이 작성한 "1차 기술 보고서(Technical Report 1)")의 대부분은 C++11에 포함되었다. 각 라이브러리 구성요소C++98 표준 C++ 라이브러리 주 구성요소표준 템플릿 라이브러리(STL)컨테이너, 반복자, 알고리즘, 함수 객체 등iostream사용자 정의 버퍼링국제화 기능 가능한 입출력cin, cout, cerr, clog 등의 사전 정의 객체국제화 지원여러 로케일 활성화 기능wchar_t 등의 타입(대개 16비트 문자) 및 wstring(wchar_t 타입으로 정의한 str..