'기초'에 해당되는 글 1건

  1. 2021.01.05 책 "전문가를 위한 C++" - 1.1 C++의 기초

책 "전문가를 위한 C++" - 1.1 C++의 기초

프로그래밍/c,c++ 2021. 1. 5. 17:33
반응형

"전문가를 위한 C++" 내용 정리

www.yes24.com/Product/Goods/77669043

 

전문가를 위한 C++

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을

www.yes24.com

namespace - 이름이 충돌하는 문제를 해결하기 위해 나온 개념
내가 작성한 코드의 함수명과 외부 라이브러리의 함수명이 같을 때
mycode.h

namespace mycode {
    void foo();
}

mycode.cpp

namespace mycode {
    void foo() {
        std::cout << "foo() called in the mycode namespace" << std::endl;
    }
}
mycode::foo();

using namespace mycode;
foo(); 

한 파일에서 using 을 여러개 사용하면 namespace를 사용하지 않는 것과 동일 한 상황이 됨

 

특정 항목에 대해서만 using 사용 가능함

using std::cout;
cout << "Hello world" << std::endl;

 

casting - c++ 방법 : i3

float myFloat = 3.14f;
int i1 = (int)myFloat;
int i2 = int(myFloat);
int i3 = static_cast<int>(myFloat);

연산자 - 우선순위 애매하면 ()

int i = 34 + 8 * 2 + 21 / 7 % 2;
int i = 34 + (8 * 2) + ((21 / 7) % 2);

enum 타입

const int PieceTypeKing = 0;
const int PieceTypeQueen = 1;
const int PieceTypeRook = 2;
const int PieceTypePawn = 3;
int myPiece = PieceTypeKing;

enum PieceType {
    PieceTypeKing,
    PieceTypeQueen,
    PieceTypeRook,
    PieceTypePawn
};
PieceType myPiece;
myPiece = 0; // ERROR

엄격한 타입(형변환 방지 및 사용 범위 지정)

enum class PieceType {
    King = 1,
    Queen,
    Rook = 10,
    Pawn
};

if (PieceType::Queen == 2) { ... } // ERROR
if (static_cast<int>(PieceType::Queen) == 2) { ... }

저장 되는 타입 지정 가능

enum class PieceType : unsigned long { 
    King = 1,
    Queen,
    Rook = 10,
    Pawn
};

 

bool 타입 : true, false

 

함수 리턴 타입 추론
여러개 return 이 있을 경우 모두 동일 타입이어야 함

auto addNumbers(int number1, int number2) {
    return number1 + number2;
}

 

배열 - c스타일 대신 std::array
장점 : 크기 명확, 자동 포인터 형변환 방지, 반복자로 배열 원소 접근

array<int, 3>arr = { 1, 2, 3 };
cout << "size = " << arr.size() << endl;
cout << "2nd = " << arr[1] << endl;

std::vector - 자동 확장

vector<int>vec = { 1, 2, 3 };
cout << "size = " << vec.size() << endl;
cout << "2nd = " << vec[1] << endl;
vec.push_back(4);
cout << "size = " << vec.size() << endl;
cout << "4th = " << vec[3] << endl;

 

범위 기반 for 문

std::array<int, 4> arr = { 1, 2, 3, 4};
for (int i : arr) {
    std::cout << i << std::endl;
}

int carr[4] = { 5, 6, 7, 8 };
for (int i : carr) {
    std::cout << i << std::endl;
}

 

initializer list
include <initializer_list>
클래스 템플릿, 타입 세이프

int a = makeSum({ 1, 2, 3 });
int b = makeSum({ 10, 20, 30, 40, 50, 60 });
// int c = makeSum({ 1, 2, 3.0 }); // ERROR
cout << "a = " << a << ", b = " << b << endl;
반응형
: