목록전체 글 (302)
나만의 작은 도서관
전방 선언(Forward Declaration)이란?class MyClass;"전방 선언(Forward Declaration)"은 식별자를 정의하기 전에 식별자의 존재를 컴파일러에게 미리 알리는 것이다.전방 선언의 주 사용목적은 헤더 포함 의존성을 최소화하여 컴파일 속도를 향상하기 위함이다. (앞으로의 설명은 클래스 전방 선언을 기준으로 설명) 전방 선언 예시// Game.hclass Player; // 나중에 정의하겠다고 전방선언class Game{public: Game() {} ~Game() {}private: Player* _player; // 최상단 줄을 지우고 class Player* _player;와 같은 형태도 가능하다.}; 전방 선언이 가능한 경우와 불가능한 경우전방 선언은 컴파일러가 클..

캐스팅이란?캐스팅은 데이터 타입을 다른 데이터 타입으로 변환하는 것을 의미한다.C 스타일의 캐스팅T var = (T)expression;C++에서도 C 스타일 문법을 사용할 수 있다. C 스타일의 캐스팅은 표현식(expression) 앞에 소괄호로 둘러싼 변환할 타입 T를 적어주는 방식으로 선언한다. 일반 타입(값 타입)으로 캐스팅int a = (int)b;변환할 타입으로 비트 패턴을 재구성하는 캐스팅.단, 이전 비트 패턴의 의미를 최대한 유지하는 방향으로 재구성한다.큰 타입에서 작은 타입으로 캐스팅할 경우 상위 비트가 잘린다.예를 들어, int → short로 캐스팅할 경우, 상위 비트 2바이트가 잘려 0xffff0000 → 0x0000이 된다.연관 관계가 없는 타입 사이의 캐스팅은 컴파일 오류가 발생..
explicit 키워드explicit Mystring(int capacity); // 생성자를 explicit으로 지정 대입 연산자가 생성자로 암시적 변환되지 못하도록 막는 키워드. 암시적 변환(implicit conversion) 시 문제점암시적 변환은 프로그래머가 명시적으로 변환을 요청하지 않더라도 컴파일러가 자동으로 처리하는 타입 변환을 말한다. 이러한 암시적 변환은 아래의 예시에서 대입 연산자가 생성자로 변환되는 것처럼, 원하지 않는 방식으로 변환되는 문제가 있다.class MyClass {public: MyClass(int x) { cout [MyClass myclass(3)]으로 암시적 변환 발생func(3); // func(MyClass(3))이 실행.// 실행 결과// MyClass..

오버라이딩(overriding)이란?오버라이딩은 기반 클래스에 정의된 함수를 파생 클래스에서 “재정의”하는 것을 의미한다.오버라이딩한 함수는 부모 클래스의 함수와 다른 함수로 취급한다.시그니처가 같아도 다른 클래스에 정의되어 있으면 서로 다른 함수로 취급하기 때문.객체는 같은 시그니처를 가진 함수가 여러 개 정의되어 있는 경우, 가장 가까운 함수를 호출한다.즉, 오버라이딩한 파생 클래스의 함수를 우선적으로 호출한다. 오버라이딩 하는 법오버라이딩하는 방법은 간단하다. 기반 클래스에 정의한 함수의 시그니처와 일치하는 함수를 파생 클래스에 재정의하면 된다.#include using namespace std;class Base {public: void ShowString() {cout 위 방식의 문제점..

상속(Inheritance)이란?상속은 다른 클래스의 내용을 그대로 물려받아서 사용하는 것을 의미한다.좀 더 딱딱하게 말하면, 기존 클래스(부모 클래스 또는 상위 클래스)의 속성과 기능을 새로운 클래스에서 재사용하거나 확장할 수 있도록 하는 기능을 의미한다.상속을 이용하면 상하 관계에 있는 클래스들 내에 중복되는 코드가 생기는 것을 방지할 수 있다.상속 시, 상속을 하는(물려주는) 클래스를 기반 클래스 또는 부모 클래스라고 부르며, 상속을 받는(물려받는) 클래스를 파생 클래스 또는 자식 클래스라고 부른다. (앞으로의 설명에선 각각 기반 클래스, 파생 클래스라 부름) 상속의 기본 구조class Base {} // 기반 클래스class Derived : public Base {} // 파생 클래스Base 클..

연산자 오버로딩(Operator Overloading)연산자 오버로딩은 C++에서 기존의 연산자(+, -, *, /, == 등)를 사용자가 원하는 방식으로 동작하도록 재정의하는 것을 의미한다.즉, 연산자 오버로딩은 사용자 정의 연산자를 정의하기 위해 사용한다.연산자 오버로딩을 사용하면 객체 간 연산을 보다 직관적으로 처리할 수 있다. 예를 들어, STL 컨테이너의 대표 컨테이너인 vector는 ‘>’와 같은 비교 연산자들을 오버로딩하여 서로의 크기를 비교할 수 있다. (자세한 내용은 여기 참고)대부분의 연산자들은 오버로딩이 가능하다. 심지어 [] (첨자 연산자), 오버로딩을 할 수 없는 연산자로는 :: (범위 지정), . (멤버 지정),.* (멤버 포인터로 멤버 지정)이 있다.연산자 오버로딩은 정의한 위..