목록Develop/C++ (80)
오븐 노트
#include using namespace std; // 1) struct vs class // C++에서는 둘의 차이가 거의 없다. // struct의 기본 접근 지정자는 public이고, class는 private이다. // 굳이 나눈 이유? C++은 C언어에서 파생되어 나온 언어이기에 호환성을 위해 남겨져있는 C언어의 특성 // -> struct는 구조체(데이터 묶음)을 표현하는 용도로 사용하는 것을 추천 // -> class는 객체 지향 프로그래밍의 특징을 나타내는 용도로 사용하는 것을 추천 struct TestStruct { // public: int _a; int _b; }; class TestClass { // private: int _a; int _b; }; // 2) static 변수,..
#include using namespace std; // 연산자 오버로딩(Operator Overloading) // 연산자 vs 함수 // - 연산자는 피연산자의 개수/타입이 고정되어 있음. // 연산자 오버로딩이란? 정해진 몇가지 타입 외에 자기자신의 클래스에 대한 특정 연산을 지원하고 싶을 때 사용하는 것 // 우선 연산자 함수 정의 필요 // 일반 함수가 멤버 함수, 전역 함수로 나누어지는것처럼 연산자 함수도 두가지로 나누어짐. // ※-------------------------------------------------------------------------------------※ // - 멤버 연산자 함수 version // -- a op b 형태에서 왼쪽 기준으로 실행됨 (a가 클래스..
#include using namespace std; // 멤버 변수 초기화 ? 다양한 문법이 존재 // 초기화를 해야하는 이유 // - 버그 예방에 중요 // - 포인터 등 주소값이 연루되어 있을 경우 // 초기화 방법 // - 생성자 내에서 // - 초기화 리스트 // - C++11 문법 ex) int _hp = 100; // 모던 C++ 11 이전에서는 지원하지 않던 문법. 팀에 따라 사용하지 않을 수 있다. // 초기화 리스트 // - 일단 상속 관계에서 원하는 부모 생성자 호출할 때 필요. // - 생성자 내에서 초기화 vs 초기화 리스트 // -- 일반 변수는 별 차이 없음 // -- 멤버 타입이 클래스인 경우 차이가 생김 // -- 정의함과 동시에 초기화가 필요한 경우 (참조 타입, cons..
#include using namespace std; // 다형성 (Polymorphism == Poly + morph) == 겉은 같지만 기능이 다르게 동작한다. // - 오버로딩 (Overloading) == 함수 중복 정의 == 함수 이름의 재사용 // - 오버라이딩 (Overriding) == 재정의 == 부모 클래스의 함수를 자식 클래스에서 재정의 // 바인딩 (Binding) = 묶는다 -> 어떤 함수를 호출해야하는지 해당 함수와 주소를 매핑하여 연결해주는 역할 // - 정적 바인딩 (Static Binding) : 컴파일 시점에 결정 // - 동적 바인딩 (Dynamic Binding) : 실행 시점에 결정 ※ 단골 질문 ※ // 일반 함수는 정적 바인딩을 사용 // 동적 바인딩을 원한다면?..
#include using namespace std; // 객체지향 (OOP Object Oriented Programming) // - 상속성 // - 은닉성 = (캡슐화) // - 다형성 // 은닉성(Data Hiding) = 캡슐화(Encapsulation) // 몰라도 되는 것을 숨긴다 // 숨기는 이유? // - 1) 정말 위험하고 건드리면 안되는 경우 // - 2) 다른 경로로 접근하길 원하는 경우 // ex) 자동차 // - 핸들 // - 페달 // - 엔진 // - 문 // - 각종 전기선 // 일반 구매자 입장에서 사용하는 것? // - 핸들/페달/문 // 몰라도 되는 부분 (오히려 건드리면 큰일남) // - 엔진, 각종 전기선 // public(공개적) protected(보호받는) pr..
#include using namespace std; // 객체지향 (OOP Object Oriented Programming) // - 상속성 // - 은닉성 // - 다형성 // [ [ Player ] ] // [ Knight ] // 생성자(N)/소멸자(1) // Player 생성자? Knight 생성자? -> 둘다 호출 // 중요! 순서는 부모생성자 -> 자식생성자 -> 자식소멸자 -> 부모소멸자 // class는 일종의 설계도 // RPG 게임 상속 구조 // GameObject // - Creature // -- Player, Monster, NPC, Pet // - Projectile // -- Arrow, Fireball // - Env // Item // - Weapon // -- Swo..
#include using namespace std; // [생성자(Constructor)]와 [소멸자(Destructor)] // 클래스에 '소속'된 함수들을 멤버 함수라고 함 // 이 중에서 굉장히 특별한 함수 2종이 있는데, 바로 [시작]과 [끝]을 알리는 함수들 // - 시작(탄생) -> 생성자 (여러개 존재 가능) // - 끝(소멸) -> 소멸자 (오직 1개만) // [암시적(Implicit) 생성자] // 생성자를 명시적으로 만들지 않으면, // 아무 인자도 받지 않는 [기본 생성자]가 컴파일러에 의해 자동으로 만들어짐. // -> 그러나 우리가 명시적(Explicit)으로 아무 생성자 하나 만들면, // 자동으로 만들어지던 [기본 생성자]는 더 이상 만들어지지 않음. // class는 일종의..
#include using namespace std; // 데이터 + 가공 (로직, 동작) // 객체란? 플레이어, 몬스터, GameRoom 등 모든 것 // Knight를 설계해보자 // - 속성 (데이터) : hp, attack, y, x // - 기능 (동작) : Move, Attack, Die // struct와 class는 c에서는 서로 완전히 다르지만 c++에서는 거의 동일하다 (문법 또한 거의 같다) // class는 일종의 설계도 // '소속'이 중요 class Knight { public: //멤버 함수 선언 void Move(int y, int x); void Attack(); void Die() { hp = 0; cout posX = x; } void Knight::Move(int y..