💻프로그래밍 내용 정리

    [C++ 1.4.1] 직접 리스트 초기화와 복제 리스트 초기화

    이니셜라이저 리스트 이니셜라이저는 다음 두 가지가 있으며, 이니셜라이저 리스트를 중괄호로 묶어서 표현한다. - 복제 리스트 초기화 ㅣ T obj = {arg1, arg2, ... }; - 직접 리스트 초기화 : T obj {arg1, arg2, ... }; Auto를 이용한 초기화 C++17 부터는 auto 타입 추론 기능과 관련하여 복제 리스트 초기화와 직접 리스트 초기화가 크게 달라졌다. C++17 이전에는 복제 리스트 초기화와 직접 리스트 초기화 모두 initializer_list로 처리했다. // 복제 리스트 초기화 auto a = {11}; // initializer_list auto b = {11, 22}; // initializer_list // 직접 리스트 초기화 auto c {11}; /..

    [C++ 1.4.0] 유니폼 초기화, 축소 변환

    유니폼 초기화 C++11 이전에는 타입의 초기화 방식이 일정하지 않았다. 다음은 원을 정의할 때 한 번은 구조체로, 한 번은 클래스로 작성했다. struct CircleStruct { int x, y; double radius; }; class CircleClass { public: CircleClass(int x, int y, double radius) : mX(x), mY(y), mRadius(radius) { } private: int mX, mY; double mRadius; }; C++11 이전에는 CircleStruct 타입 변수와 CircleClass 타입 변수를 초기화하는 방법이 서로 달랐다. CircleStruct myCircle1 = { 10,10,2.5 }; CircleClass my..

    [C++ 1.3.2] 클래스 사용하기

    [C++ 1.3.2] 클래스 사용하기

    다음 코드는 이전 장의 AirlineTicket 클래스를 사용하는 에를 보여주고 있다. 여기서 AirlineTicket 객체를 하나는 스택 기반으로, 다른 하나는 힙 기반으로 생성한다. #include #include "AirlineTicket.h" using namespace std; int main() { AirlineTicket myTicket; // 스택 기반 AirlineTicket myTicket.setPassengerName("Sherman T. Socketwrench"); myTicket.setNumberOfMiles(700); double cost = myTicket.calculatePriceInDollars(); cout setHasEliteSuperRewardsStatus(true);..

    [C++ 1.3.1] 클래스 정의, 접근 수준(public, private), 생성자(생성자 이니셜라이저), 소멸자

    클래스(class) 클래스란 객체의 특성을 정의한 것이다. C++에서 클래스를 선언하는 코드는 주로 헤더 파일(.h)에 작성하고, 구체적으로 구현하는 코드는 소스 파일(.cpp)에 작성된다. 클래스를 이해하기 위해 항공기 티켓에 대한 클래스를 정의해보자. 이 클래스는 비행 마일리지에 따라 티켓의 가격을 계산하고, 우수 등급 회원인지 여부도 표현한다. 우수 등급 회원인지 여부도 표현한다. 접근 수준 클래스를 정의할 때는 먼저 클래스 이름부터 적는다. 그리고 중괄호 안에 이 클래스의 데이터 멤버(속성)와 메서드(동작)을 선언한다. 각각의 데이터 멤버와 메서드마다 public, protected, private 등으로 접근 수준을 지정한다. public으로 지정한 멤버는 클래스 밖에서 접근할 수 있는 반면 p..

    [C++ 1.2.6] 타입 추론(auto, decltype)

    타입추론이란? 타입 추론이란 표현식의 타입을 컴파일러가 스스로 알아내는 기능이다. 타입 추론과 관련된 키워드로 auto와 decltype가 있다. 1. auto 키워드 auto 키워드는 다음과 같이 다양한 상황에서 사용한다. - 함수의 리턴 타입을 추론 - 구조적 바인딩에 사용 - 표현식의 타입을 추론 - 비타임(non-type, 타입이 아닌) 템플릿 매개변수의 타입을 추론 - decltype(auto)에서 사용 - 함수에 대한 또 다른 문법으로 사용 - 제네릭 람다 표현식에서 사용 변수를 선언할 때 타입 자리에 auto 키워드를 지정하면 그 변수의 타입은 컴파일 시간에 자동으로 추론해서 결정한다. auto x = 123; // x는 int 타입으로 결정된다. 이 예제처럼 int 대신 auto로 쓸 때는..

    [C++ 1.2.5] 익셉션(exception(예외)), throw 구문, catch/try 구문

    [C++ 1.2.5] 익셉션(exception(예외)), throw 구문, catch/try 구문

    익셉션(예외)이란? C++은 유연성이 뛰어난 반면 안전성은 좋지 않다. 메모리 공간을 무작위로 접근하거나 0으로 나누는 연산을 수행하더라도 컴파일러는 가만히 수행한다. 이처럼 C++에 안전성을 좀 더 높이기 위해 제공하는 기능 중 하나가 익셉션(예외)이다. 익셉션이란 예상하지 못한 상황을 표현하는 클래스/객체이다. 예상하지 못한 상황에 대처하는 방법은 그 함수에서 nullptr이나 에러 코드와 같은 특수한 값을 리턴하는 것이다. 코드에서 특정한 조건을 만족해서 익셉션을 발생시키는 것을 익셉션을 던진다(발생시킨다)고 표현하고, throw 구문으로 작성한다. 또한 이렇게 발생한 익셉션을 대해 적절한 동작을 수행하는 것을 익셉션을 잡는다(받는다, 처리한다)고 표현하고, catch 구문으로 작성한다. throw..