프로그래밍 언어/C++ 53

[자료형(data type)] C++ 파생형 클래스 2 : 생성자와 소멸자 (+39강, 41강)

B. 생성자 1. 생성자의 기초 a. 멤버 변수의 초기화 클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성되지만 초기화 하기 전까진 사용할 수 없음 객체 멤버 변수는 private 멤버때문에 일반적인 방식으론 접근할 수 없어서 초기화를 위한 public 함수가 필요하고 이런 초기화 함수는 객체의 생성과 초기화 전까지 반드시 멤버의 초기화를 위해 호출 되어야 함 b. 생성자란? 🌟 객체의 생성과 동시에 멤버 변수를 초기화해주는 멤버 함수 객체 멤버의 초기화뿐만 아니라, 객체를 사용하기 위한 외부 환경까지도 초기화하는 역할 c. 생성자의 특징 초기화를 위한 데이터를 인수로 전달받음 생성자는 반환값이 없지만, void 형으로 선언 ❌ 초기화하는 방법이 여러개일 경우, 오버로딩 규칙에 따라 여러..

[자료형(data type)] C++ 파생형 클래스 1 : 클래스의 기본

A. 클래스 1. 클래스의 개념 a. 클래스란? 🌟 구조체의 상위 호환, 객체를 만들어 내기 위한 틀 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 좀 더 확장된 의미 구조체와 클래스의 차이는 기본 접근 제어의 차이, 나머지는 거의 같음 C++은 클래스를 가지고 객체 지향 프로그램을 작성함 👉 따라서 구조체는 데이터 관리, 클래스는 객체관리 용도로 사용 클래스의 멤버 변수를 프로퍼티, 멤버 함수를 메소드라고 함 b. 객체 지향 프로그래밍 OOP OOP에선 모든 데이터를 객체(object)로 취급하며, 객체가 바로 프로그래밍의 중심 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍 객체를 만들어 내기 위한 틀과 같은 개념이 바로 클..

C++ 범위 : C++ 네임스페이스

B. 네임스페이스 1. 네임스페이스 기초 a. 네임스페이스(namespace)란? 🌟 내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역을 의미 b. 네임 스페이스가 필요한 이유 C++에서는 자료형을 구분하기 위한 다양한 내부 식별자를 가지고 있는데 프로그램이 복잡해지고 여러 라이브러리가 포함될수록 내부 식별자 간에 충돌할 가능성도 커짐 👉 따라서 이름 충돌 문제를 네임 스페이스로 해결함 c. 전역 네임스페이스(global namespace) 전역 네임스페이스라고 하는 파일 수준의 선언 영역이 존재 일반적으로 식별자의 네임스페이스가 명시되지 않으면, 전역 네임스페이스로 자동 포함 또한, C++ 표준 라이브러리 타입과 함수들은 std 네임스페이스 또는 그 속에 중첩된 네임스페이스에 선언되어 있..

C++ 범위 : 유효범위와 연결

A. 유효범위와 연결 1. 변수와 유효 범위 a. 유효 범위(scope) 🌟 하나의 변환 단위(translation unit) 내에서 해당 변수가 사용될 수 있는 범위 함수 내에서 선언된 변수는 함수 내에서만 사용 밖에서 선언된 변수는 선언된 이후에 나오는 함수에서 모두 사용 가능 💙 Info C++에서는 파일(file) 용어 대신 변환 단위(translation unit)라는 용어를 사용 b. 연결(linkage) 🌟 해당 변수를 사용할 수 있는 파일의 접근 가능 여부 함수 내에서 선언된 변수는 함수 밖에서는 사용할 수 없으므로 연결 ❌ 외부 연결(external linkage)을 가지는 변수 : 여러 파일에서 사용 내부 연결(internal linkage)을 가지는 변수 : 하나의 파일에서만 사용 2..

[자료형(data type)] C++ 파생형 공용체와 열거체 총정리

A. 공용체와 열거체 1. 공용체 a. 공용체란? 🌟 구조체와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유 union 키워드를 사용하여 선언 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입 모든 멤버 변수가 같은 메모리를 공유(메모리 절약)해 한 번에 하나의 멤버 변수밖에 사용할 수 없음 b. 공용체의 메모리 할당 멤버 변수가 같은 메모리 위치를 공유해 마지막 값만 유효함 (나머지는 덮어쓰임) 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받음 👉 따라서 공용체 배열을 사용하면, 같은 크기로 구성된 배열 요소에 다양한 크기의 데이터를 저장할 수 있음 🎨 도식화 HTML 삽입 미리보기할 수 없는 소스 #include using namespa..

[자료형(data type)] C++ 파생형 구조체 총정리

A. 구조체 1. 구조체의 기본 a. 구조체란? 🌟 사용자가 C++언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입 = 사용자 정의 자료형이라고 부름 배열이 같은 타입의 변수 집합이라면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것 👉 이때 구조체를 구성하는 변수(함수)를 구조체의 맴버 또는 맴버변수라고 함 타입일 뿐만 아니라, 클래스의 기초가 됨 b. 구조체의 특징 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있음 또한 함수 리턴값으로 구조체를 사용하면 여러 개의 데이터를 한 번에 반환할 수 있음 (함수는 원래 하나의 값만 가능) c. 구조체의 정의와 선언 HTML 삽입 미리보기할 수 없는 소스 struct 구조체이름//struct 키워드 : 구조체의..

[게임 프로그래머 입문 올인원] 객체지향 : static과 싱글톤 (33강)

E. static 키워드 1. static의 기초 a. static이란? 🌟 변수와 함수의 범위, 수명 및 접근 방법을 변경하는 데 사용하는 키워드 2. static의 종류와 관계 a. 정적 변수(Static Variables) 🌟 함수 내부에서 선언된 지역 변수를 "정적 변수"로 만듦 변수는 프로그램이 처음 실행될 때 한 번 초기화되어 여러번 호출되어도 초기화 되지 않음 정적 변수는 함수의 범위를 벗어나도 값이 유지됨 HTML 삽입 미리보기할 수 없는 소스 void countCalls() { static int counter = 0; // 정적 변수 counter++; cout HTML 삽입 미리보기할 수 없는 소스 class MyClass { public: static int count; // 정적 ..

[게임 프로그래머 입문 올인원] 객체지향 : 연산자 오버로딩 (32강)

D. 연산자 오버로딩 1. 연산자 오버로딩의 기초 a. 연산자 오버로딩이란? 🌟 기존 연산자를 사용자 정의 클래스나 데이터 형식에 대해 재정의하여 새로운 동작을 정의하는 것을 의미 사용자 정의 객체끼리 연산자를 사용하거나, 사용자 정의 데이터 형식에 기본 연산자를 적용 사용자 정의 클래스의 편의성과 가독성을 높이는 데 사용 사용자 정의 데이터 형식에 대한 다양한 연산을 지원하는 데 유용 b. 멤버 연산자의 함수 버전 a op b 형태에서 왼쪽을 기준으로 실행 a가 class여야만 함 (반대의 경우 에러) 매개변수는 아무값이나 가능 이름은 'operator연산자' 로생성, 연산자는 연산하려는 연산자로 사용 HTML 삽입 미리보기할 수 없는 소스 class Pos{ public : 클래스이름 operator..

[게임 프로그래머 입문 올인원] 객체지향 : 멤버 변수 초기화 (31강)

C. 멤버 변수 초기화 1. 멤버 변수 초기화 방식 a. 3가지 초기화 방식 1) 생성자 내부 제일 나쁜 방법. 크게 문제가 되진 않지만 비효율적으로 동작 💙 객체가 객체를 구성하는 순서 Circle이 Shape을 상속하면서 Text를 멤버 변수로 가진다고 하면 이렇게 선처리 영역에서 먼저 생성자를 호출하면서 먼저 상속하고 구성되는 요소들 부터 생성되고 소모함 💥 생성자 내부에서 초기화 하는 방식이 제일 안좋은 이유 위처럼 선 처리 영역에서 먼저 생성된 Text() 멤버변수를 아래 그림처럼 생성자 내부에서 또 한번 생성하게 되면 이렇게 당연하게도 Text() 생성자를 두번 호출하게 된다 (심지어 내부에서 생성한 생성자는 바로 소멸되어 호출 순서도 변경됨) 👉 따라서 효율 측면에서 너무 비효율적이라 안좋다..

[게임 프로그래머 입문 올인원] 객체지향 : OOP 3대 요소 / 상속성, 은닉성, 다형성 (28, 29, 30강)

B. OPP 3대 요소 1. 상속성 (inheritance) a. 상속성이란? 🌟 부모 class로부터 매소드와 변수를 상속받는 것 👉 코드의 재사용성 때문에 매우 중요하다 b. 상속의 기본 형태 HTML 삽입 미리보기할 수 없는 소스 #include using namespace std; class Player { public: void Move() { } void Die() { } public: int _hp; int _attack; int _defence; }; class Mage : public Player { public : int _mp; }; int main() { Mage m1; m1._hp = 10;//Player의 hp를 상속받아 사용 } 🎨 도식화 c. Is-A vs Has-A 🌟 상속..