Programming Language(126)
-
Part2::Ch 03. 상속 - 03. 정적 결합, 동적 결합
1. 정적 결합(Static Binding)정적이라는 부분은 대부분 컴파일 타입이라는 개념이랑 연결되는 경우가 많다.정적 결합은 컴파일 타임(compile-time)에 함수 호출이나 멤버 접근이 어떤 코드와 연결될지 확정되는 방식으로 컴파일러가 함수 호출 대상을 미리 안다라는 개념하에 발생한 결합니다.이는 실행 도중(런타임)이 아니라, 컴파일 단계에서 어떤 함수나 멤버가 호출될지 결정되며 대표적으로는 오버로딩이 정적 결합이며 추가로 대부분의 일반 함수 호출, 연산자 오버로딩, 템플릿 등은 정적 결합이다. 2. 정적 결합을 코드로상속관계에 있는 클래스를 두개 선언해주고부모 클래스에 멤버 변수를 하나 선언해주고간단한 연산자 오버로딩 함수, 전역함수로 반환 타입이 Parent이고 매개변수를 const Pare..
2025.05.04 -
Part2::Ch 03. 상속 - 02. 가상 함수
1. 가상 함수란부모 클래스에서 정의한 함수가, 자식 클래스에서 재정의(override) 될 수 있도록 하는 함수로 virtual 이라는 키워드를 사용해서 생성한다. 먼저 부모 자식 클래스를 한번 생성해주자. 먼저 부모와 자식에 동일한 함수를 생성했을 때 메인 함수에서 각각의 객체를 생성해서 각각의 func를 호출해보면각각의 함수를 호출하는 것을 알 수 있는데 이번엔 업케스팅을 한번 해보고 나서 func 함수를 호출하도록 해보면부모 클래스의 func 함수를 호출하는 것을 알 수 있다. 원래 업케스팅을 한 이유는 부모 객체를 사용해서 자식 객체의 기능을 사용하는 기 위함인데 업케스팅을 했는데도 불구하고 부모 객체의 함수를 호출하는 것은 바라는가 아니다. 이런 상황에서 사용하는 것이 virtual 이라는 키..
2025.05.04 -
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