목록분류 전체보기 (134)
오븐 노트
#include using namespace std; // malloc -> void*를 반환하고, 이를 우리가 (타입 변환)을 통해 사용하였음. class Knight { public: int _hp = 10; }; class Dog { public: Dog() { } // 타입 변환 생성자 Dog(const Knight& knight) { _age = knight._hp; } // 타입 변환 연산자 // 특이하게도 리턴 타입이 없음. Knight에서 모든 의미를 함축하고 있기 때문 operator Knight() { return (Knight)(*this); } public: int _age = 1; int _cuteness = 2; }; class BullDog : public Dog { publi..
#include using namespace std; // 메모리 구조 복습 // - 실행할 코드가 저장되는 영역 -> 코드 영역 // - 전역(global)/정적(static) 변수 -> 데이터 영역 // - 지약 변수/매개 변수 -> 스택 영역 // - 동적 할당 -> 힙 영역 // ex) // - MMORPG 동접 1명-5만명, 몬스터 1마리-500만 마리 // - 몬스터 생성 이벤트 -> 5분 동안 몬스터 10배 // - 스택 영역 // -- 함수가 끝나면 같이 정리되는 불안정한 메모리 // -- 잠시 함수에 매개변수를 넘긴다거나 잠깐 사용하는 용도로는 좋음 // - 메모리 영역 // -- 프로그램이 실행되는 도중에는 무조건 사용되고 있는 영역 // - 힙 영역 // -- 필요할 때만 사용하고, ..
#include using namespace std; // 메모리 구조 복습 // - 실행할 코드가 저장되는 영역 -> 코드 영역 // - 전역(global)/정적(static) 변수 -> 데이터 영역 // - 지약 변수/매개 변수 -> 스택 영역 // - 동적 할당 -> 힙 영역 // ex) // - MMORPG 동접 1명-5만명, 몬스터 1마리-500만 마리 // - 몬스터 생성 이벤트 -> 5분 동안 몬스터 10배 // - 스택 영역 // -- 함수가 끝나면 같이 정리되는 불안정한 메모리 // -- 잠시 함수에 매개변수를 넘긴다거나 잠깐 사용하는 용도로는 좋음 // - 메모리 영역 // -- 프로그램이 실행되는 도중에는 무조건 사용되고 있는 영역 // - 힙 영역 // -- 필요할 때만 사용하고, ..
#include using namespace std; // 메모리 구조 복습 // - 실행할 코드가 저장되는 영역 -> 코드 영역 // - 전역(global)/정적(static) 변수 -> 데이터 영역 // - 지약 변수/매개 변수 -> 스택 영역 // - 동적 할당 -> 힙 영역 // ex) // - MMORPG 동접 1명-5만명, 몬스터 1마리-500만 마리 // - 몬스터 생성 이벤트 -> 5분 동안 몬스터 10배 // - 스택 영역 // -- 함수가 끝나면 같이 정리되는 불안정한 메모리 // -- 잠시 함수에 매개변수를 넘긴다거나 잠깐 사용하는 용도로는 좋음 // - 메모리 영역 // -- 프로그램이 실행되는 도중에는 무조건 사용되고 있는 영역 // - 힙 영역 // -- 필요할 때만 사용하고, ..
#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) : 실행 시점에 결정 ※ 단골 질문 ※ // 일반 함수는 정적 바인딩을 사용 // 동적 바인딩을 원한다면?..