C++은 4가지의 하위 언어를 제공한다.CC++의 문법적 구조는 C에서 거의 모든 것을 가져왔다.객체 지향 개념의 C++클래스, 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩) 등 객체 지향 설계의 규칙을 이용한다.템플릿 C++TMP(Template metaprogr
일단 메모리가 할당된다.할당된 메모리에 대한 1개 이상의 생성자가 호출된다.우선 기존 할당된 메모리에 대한 1개 이상의 소멸자가 호출된다.그 후 메모리가 해체된다.위 코드처럼 new 표현식에 맞춰 delete 표현식을 맞춰주자가 핵심 내용이다.new에 를 썼다면 여
C++의 연산 실행 순서는 다른 컴파일러들에 비해 자유도가 높다.때문에 계획과는 다르게 연산이 진행될 수 있어 메모리 누수가 발생할 수 있다.(매개변수의 초기화가 언제 발생 되는지 알 수 없어서 RALL 객체에 먼저 넣어야함)해결책객체 생성 후, 스마트 포인터에 저장한
인터페이스 설계를 제대로 하고싶다면 우선, 저지를 만한 실수의 종류를 머리에 넣어두어야한다!아래 코드와 같이 매개 변수를 잘못 넣을 수 있다.또한 아래코드처럼 타입에 제한을 걸어 오류를 방지\_explicit : 자신이 원하지 않은 형변환이 일어나지 않도록 제한하는 키
클래스를 설계할 때는 문법이 자연스럽고, 의미구조가 직관적이며, 효율적인 구현이 한 가지 이상 가능해야한다. 좋은 클래스를 만들기 위해 고민해야할 점들을 나열했다.새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가?객체를 생성하게되면 객체의 소멸을 설계해
간단 요약 값에 의한 호출은 생성자와 소멸자가 중복되어 실행된다. 그런 불필요한 생성자,소멸자 호출을 방지하는 방법은 상수객체 참조자에 의한 전달 방법이다!복사 효율을 높이자!복사 손실 문제에 노출되지 않도록 해야한다!값에 의한 전달함수로부터 객체를 전달 받거나, 함수
요약항목20에서 '참조에 의한 전달'이 좋아보여서 값에 의한 전달 함수에서 있지도 않은 참조를 반환하지말자매개변수가 참조자이고, 그 참조자를 반환하는 것은 괜찮지만 함수에서 생성된 객체의 참조자를 반환하는 경우 생성자와 소멸자가 중복하여 불필요한 호출만 일어나게 되어
요약클래스 작성에 있어 캡슐화는 정말로 중요하다. 캡슐화가 안되어있다면 사용자에게 누드쇼를 한 것이나 다름없다.C++ 세상에선 public 이란 ' 캡슐화되지 않았다 ' 라는 뜻이다.멤버 데이터들은 거의 private 안에 써주는 것이 중요하다. 멤버함수를 통해 멤버
요약멤버함수보다는 편의함수를 잘 사용해보자. 편의함수는 클래스 내부에 접근할 필요가 없고,무조건 클래스의 멤버 함수만을 이용해야하기 때문이다.편의함수의 장점캡슐화보다 안전함. private 멤버 데이터 접근 함수가 줄어든다. 캡슐화된 클래스를 한번더 세부적으로 나누어사
요약평소에 사용하는 swap함수는 우리가 흔하게 사용하는 형식이다.예시코드위와같은 swap() 함수를 사용하면 사본(temp)가 필요없는 경우도 있는데, 사본까지 복사하는 게 비효율적이라고 생각되면, pimpl(pointer to implementation)이란 기법을
C++ 스타일 캐스트 4가지const_cast (표현식) : 객체의 상수성을 없애는 용도.dynamic_cast (표현식) : 안전한 다운캐스팅.reinterpret_cast (표현식) : 포인터를 int로 바꾸는 등의 하부 수준 캐스팅.static_cast (표현식)
요약핸들이란 다른 객체에 손을 댈 수 있게 하는 매개자를 뜻한다.객체 내부에 핸들을 반환하는 함수는 클래스에 어떤식으로 넣든 위험하다. const를 붙이든, 상수든 비상수든 어떤식으로 넣어도 위험하니 왠만하면 피하자. 예외적인 규칙으론 operator\[] 연산자함수가
요약예외 안정성의 요구사항자원이 새도록 만들지 않는다.자료구조가 더렵혀지는 것을 허용하지 않는다.(함수에서 메모리상에 없는 함수를 호출한다던가, 정상적 작동범주를 넘어선 경우)예외 안정성은 이 보장성 중 하나 보장기본적인 보장예외 발생 시, 자원 누수를 시키지 않겠다.
요약inline 함수의 특징 1\. 인라인 함수를 사용하려면 함수 선언 앞에 inline이라는 키워드를 사용한다.2\. 클래스 멤버 함수가 inline을 사용하려면, 함수 정의의 위치가 \*.h에 있어야 한다. 안그러면 확인할 수 없는 참조라고 뜸3\. 함수의
텍스트public 상속 모형은 반드시 "is - a(...는 ...의 일종이다)" 를 따르도록 만들자요약부모 클래스를 자식 클래스로 착각하지말자는 뜻.상속받은 클래스가 상속해준 클래스가 될 순 있지만, 상속해준 클래스는 자식 클래스가 될 수 없다.but 정사각형이 직사
요약C++ 컴파일러는 유효범위 안에서 변수x라는 이름을 만나면 일단 그 컴파일러 자신이 처리하고 있는 지역 유효범위를 뒤져서같은 이름을 가진 것이 있는가를 알아본다. 있다면 타입 상관없이 가려버린다.현재 자기위치에 있는 x가 다른 x를 가리는 것이다.기본적인 C++의
요약기본 클래스 상속에는 크게 두가지가 있다. 인터페이스상속, 구현상속인터페이스 상속이란?순수 가상함수의 상속을 의미. 순수 가상함수는 구체 클래스가 해당 순수 가상 함수를 다시 선언해야하고, 추상 클래스 안에서 정의를 갖지 않음. 순수 가상함수를 선언한느 목적은 파생
요약어떤 문제를 해결하기 위한 설계를 찾을 때 가상 함수를 대신하는 방법들도 고려해 보자.예시게임 캐릭터의 체력을 반환하는 기능을 구현해보자. 예시코드위 코드에서 약점을 많이 찾을 수 있다.가상함수는 반드시 private으로 선언해야한다! 하지만 더 좋은 대체 방안으로
요약 상속받은 기본 매개변수를 왜 바꾸면 안되는 걸까?기본적으로 가상 함수는 동적으로 바인딩되지만, 기본 매개변수 값은 정적으로 바인딩 된다.정적 바인딩은 early binding 이라 불리고, 동적 바인딩은 late binding이라 불린다. 이는 서로 실행되는 타이
요약public은 is-a이다.실제로는 is-implemented-in-terms-of가 될 수도 있고 has-a가 될 수도 있다. 그 이유는 영역이 2가지 이기 때문.소프트웨어의 응용영역(has-a), 구현 영역(is-implemented-in-terms-of)상대적
요약C++의 컴파일러는 최적 일치 함수를 찾은 후에 비로소 함수의 접근가능성을 점검한다.다중상속을 하게 되면 컴파일러가 난처한 상황이 생긴다.함수의 모호성두 개의 클래스를 상속받은 파생 클래스가 서로 다른 부모클래스의 이름이 같은 함수를 호출할 때,컴파일러는 어떤 부모
요약객체지향 프로그래밍의 중심이 되는 두가지1\. 명시적 인터페이스2\. 런타임 다형성명시적 인터페이스는 대개 함수 시그너처로 이루어져 있다. 함수 시그너처는 함수의 이름, 매개변수 타입, 반환 타입 등을 통들어 말한다.(데이터 멤버는 포함하지 않는다).이와 다르게 암
요약예전에는 new연산을 통해 메모리를 할당하면서 메모리 할당을 못하게 되었을 때, NULL을 반환했지만, 지금은 사용자가 처리자(new-handler)를 통해 예외처리를 할 수 있다. 프로그램 구현에 좋은 방향으로 new를 사용하는 방법충분히 많은 메모리를 구비해둔다
요약프로그램을 짜다보면 오버런, 언더런과 같은 메모리 실수를 할 수도 있다. 이럴경우를 대비해사용할 메모리의 앞 뒤에 경계표지(오버런/언더런 탐지용 바이트 패턴)을 넣어두어 만들 수 있고, 해당 경계표지 부분에 다른 정보가 적혀있다면로그로 기록하여 문제를 일으킨 포인터