C++/C++ 기초

    [C++] 템플릿 응용

    템플릿 파라미터 팩 (parameter pack) // typename 뒤 ...으로 오는 것이 파라미터 팩 template 템플릿 파라미터 팩은 0개 이상의 템플릿 인자를 나타낸다. 함수에서는 인자로 ... 이 오는 것을 함수 파라미터 팩이라고 부르며, 0개 이상의 함수 인자를 나타낸다. 가변 길이 템플릿 예제 print() 함수 구현 #include using namespace std; // 단일 인자의 print 함수 template void print(T arg) { cout

    [C++] 템플릿 (Template)

    템플릿 매개변수의 타입에 따라 함수나 클래스를 생성하는 매커니즘 여러 타입에서 동작할 수 있는 코드를 찍어내는 틀이라고 생각하면 된다. 템플릿을 사용하면 다양한 타입에 대해서 하나의 함수만 정의하면 되므로 전체 코드를 매우 간결하게 만들 수 있다. 템플릿을 통해 타입을 마치 인자인 것 마냥 사용하는 것을 일반화 프로그래밍(generic programming)이라고 한다. 템플릿 정의 템플릿은 함수 템플릿(Function Template)과 클래스 템플릿(Class Template)으로 나뉜다. 함수 템플릿 정의 template 함수 원형 { // 함수 본체 } typename 키워드를 template의 인자로서 받는다. 타입이름은 함수 원형과 본체에서 임의의 타입으로 사용되며, 함수 호출 시 전달된 매개..

    [C++] 순수 가상 함수 / 추상 클래스

    순수 가상 함수(Pure Virtual Function) 가상 함수 중 파생 클래스에서 반드시 재정의해야 하는 멤버 함수 함수의 동작을 정의하는 본체를 가지고 있지 않다. 파생 클래스에서 재정의하지 않으면 사용할 수 없다. 순수 가상 함수 선언 순수 가상 함수를 선언하는 문법은 다음과 같다. virtual 멤버함수의원형=0;// '=0'은 함수만 있고 본체는 없다는 의미 순수 가상 함수 예제 #include using namespace std; class Animal { public: Animal() {} virtual ~Animal() {} // 가상 소멸자 선언 virtual void Cry() = 0; // 순수 가상 함수 선언 }; class Dog : public Animal { public: ..

    [C++] virtual 소멸자

    virtual 소멸자 상속 시에 소멸자는 반드시 virtual을 이용하여 가상함수로 만들어야 한다. 평범한 상속 Case #include using namespace std; class Base { public: Base() { cout

    [C++] 클래스 상속 (Inheritance)

    상속 (inheritance) 상위 클래스의 내용(속성, 메소드)을 하위 클래스가 그대로 물려받는 것 상위 클래스(super class) == 부모 클래스(parent class) == 기초 클래스(base class) 하위 클래스(sub class) == 자식 클래스(child class) == 파생 클래스(derived class) 상속 구현하기 상속 선언 문법은 다음과 같다. // 단일 상속 class 파생클래스: 접근제어지시자 기초클래스{ // 파생클래스 멤버 } // 다중 상속 class 파생클래스: 접근제어지시자 기초클래스, 접근제어지시자 기초클래스{ // 파생클래스 멤버 } // EX class Derived : public Base { // members of Derived class } ..

    [C++] friend 키워드

    friend 접근 제한자를 무력화하여 외부에서도 private, protected 멤버에 접근할 수 있도록 하는 키워드 주로 클래스에서 멤버 함수가 아닌 함수가 private한 멤버 변수에 접근하려고 할 때 사용한다. 클래스에서 멤버 함수와 전역 함수를 정의하는 것의 차이를 잘 모르겠다면 아래의 게시글을 참고한다. [C++] 오버로딩 (Overloading) - 2. 연산자 [C++] 오버로딩 (Overloading) - 1.함수, 생성자 오버로딩 (overloading) 같은 이름의 메소드(method) 또는 생성자를 매개변수의 개수나 타입을 다르게 지정함으로써 2개 이상 정의하는 것 함수 오버로딩 함 wn42.tistory.com friend 선언 friend 키워드를 이용하여 만들 수 있는 형태는 ..

    [C++] 오버로딩 (Overloading) - 2. 연산자

    [C++] 오버로딩 (Overloading) - 1.함수, 생성자 오버로딩 (overloading) 같은 이름의 메소드(method) 또는 생성자를 매개변수의 개수나 타입을 다르게 지정함으로써 2개 이상 정의하는 것 함수 오버로딩 함수를 호출할 때 매개변수를 보고 동작을 결 wn42.tistory.com "오버로딩 - 1. 함수, 생성자"에 이어 "연산자 오버로딩"을 배워보자. 연산자 오버로딩 C++에서는 사용자 정의 연산자를 사용할 수 있다. 기본 연산자를 여러 의미로 사용할 수 있다. (새로운 연산자를 정의하는 것은 불가능) 연산자 오버로딩 정의 연산자 오버로딩은 다음과 같이 정의한다. (반환타입) operator(연산자)(연산자가 받는 인자){ /*실행구문*/ return 반환값 } //exampl..

    [C++] mutable

    mutable const 함수(읽기만 가능)에서도 멤버 변수의 값을 변경할 수 있게 하는 키워드이다. const 함수가 무엇인지 모르겠다면 아래 참고 [C++] 클래스에서 static 이용하기 (+ const) Static 이용하기 Static 변수 static 변수는 한번 생성되면 객체가 종료될 때가 아닌, 프로그램이 종료될 때 소멸되므로 이를 생성된 객체의 개수를 세는데 활용할 수 있다. 클래스 내부에서 static 변 wn42.tistory.com mutable 키워드 이용하기 멤버 변수의 mutable 선언은 다음과 같다. mutable int x; const 함수로 mutable 멤버 변수 값 바꾸기 #include using namespace std; class Ex { private: mut..