전체 글(154)
-
Part2::Ch 03. 상속 - 01. 상속의 기본
1. 상속이란기존 클래스(부모 클래스, 기본 클래스)의 속성(멤버 변수)와 기능(멤버 함수)을 새로운 클래스(자식 클래스, 파생 클래스)가 물려받아 사용할 수 있게 하는 객체지향 프로그래밍(OOP)의 핵심 개념 중 하나이다. 2. 상속의 기본 방법상속의 기본적인 문법은 class 부모클래스 {public: void hello() { std::cout 와 같이 부모 클래스의 이름을 자식 클래스의 우측에 : 연산자를 사용해서 public 키워드와 함께 작성해주면 상속이 된다. 3. 상속의 종류(접근 지정자를 기준으로 해서)상속은 접근 지정자를 기준으로 하여 3가지로 나뉠 수 있다.class 자식 : public 부모 {}; // public 상속 → 부모의 public은 자식에서도 p..
2025.05.04 -
Part2::Ch 02. 연산자 오버로딩- 10. 사용자 정의 리터럴
1. 사용자 정의 리터럴사용자 정의 리터럴 (User-defined literal)은 C++11부터 도입된 기능으로 리터럴 값에 접미사를 붙여 그 값을 특정 타입이나 형식으로 자동 변환하는 문법이다. 2. 사용자 정의 리터럴의 사용법사용자 정의 리터럴을 정의 할때에는 무조건 _언더바를 붙인 형태로 정의되게 되어 있다.만약에 _언더바가 붙지 않은 리터럴의 경우는 표준 라이브러리에서 제공하는 리터럴로 인식하면 된다. 표준 라이브러리에서 제공하는 리터럴을 한번 보자면 chronochrono는 chrono라는 라이브러리에서 제공되는 리터럴이다. 그리고 chrono 리터럴을 사용하려면 std를 using namespace로 등록하거나 std::chrono_literals을 using namespace로 등록해야..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 09. 호출 연산자 오버로딩, 함수 객체
1. 호출 연산자호출 연산자(call operator)란 C++에서 () 괄호를 사용하는 연산자를 말한다.이를 오버로딩하면 함수처럼 객체(인자) 형식으로 객체를 함수처럼 호출할 수 있게 만들 수 있게 된다. 2. 호출연산자의 정의호출 연산자는반환타입 operator(){매개변수} const{ // 구현코드}와 같이 구현된다. 실제로 만드는 방법을 한번 보면 이렇게 호출되었을때 두 수를 비교해서 큰 숫자를 반환하는 함수 오퍼레이터를 오버로딩 해본다면이렇게 구현할 수 있다.이렇게 cout을 조금 변경해서 출력해보면이렇게 잘 출력하는 것을 볼 수 있다. 이걸 왜 쓰는 거지? 싶을 수 있는데 이건 일반적인 함수와는 다르게 상태를 보관할 수 있다는 점이 장점이다. 일반적인 함수의 경우 일회성으로 끝나게 되지..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 08. 변환 연산자 오버로딩, 변환 생성자, explicit
1. 변환 생성자먼저 변환이란 키워드는 다른 타입으로 변경해준다는 의미이다.예를 들어 int main(){ std::string s = "test"; // "test"라는 c-style 문자열이 c++스타일 String으로 변환되어 초기화 if(s){ // string 타입이 bool타입으로 변환되어 true/false를 반환 }}이런 과정들에 대한것이다. 그래서 한번 String 클래스를 만들어서 확인해보면이렇게 생성했을때 보면 문제 없이 String에 c스타일 문자열이 저장되는 것을 볼 수 있다.근데 이건 사실 저렇게 값을 넣어주는 시점에 이 생성자를 변환 생성자로 인식해서 이렇게 변환된다. 이렇게 암묵적 변환이 일어나는 과정은 사실1. "asdf"는 const char* 타입..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 07. 대입 연산자 오버로딩, 복사 생성자
먼저 복사 생성자에 대해서 알아보도록 하자.class Person {private: string name;public: Person() = default; Person(const char* c) :name(c) { } // 복사 생성자 Person(const Person& other) { name = other.name; }};이런 클래스가 존재한다고 할때int main() { Person p1("Alice"); Person p2 = p1; Person p1("Alice"); Person p2; p2 = p1;}여기에서 Person p2 = p1;와Person p2;p2 = p1;는 다르다. 위의 Pe..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 06. 첨자 연산자 오버로딩
1. 첨자연산자란첨자 연산자(subscript operator) operator[] 는 객체를 배열처럼 인덱스로 접근할 수 있게 해주는 연산자이다.클래스에서 첨자연산자를 오버로딩하면 클래스에서 obj[i] 같은 구문을 사용할 수 있도록 만들 수 있게 된다. 2. 첨자연산자의 오버로딩: Vector 클래스를 사용한이전에 사용했던 Vector 클래스를 한번 더 만들어서 사용해보도록 하자.우리가 해보고 싶은건 이렇게 했을때 순서대로 x값, y 값 이 출력 될 수 있도록 만들어 보도록 하자. 먼저 멤버 변수를 반환할 것이기에 반환값은 int 타입이 될 것이다.그리고 operator의 첨자연산의 경우는 []로 operator[]의 매개변수로는 index인 int 값이 들어가도록 만들어주면 된다.그리고 만약 ind..
2025.05.02