기타/C++

· 기타/C++
기본 문법 class PARENT { }; class CHILD : public PARENT { }; 기본적으로 private로 상속받기 때문에, public을 써주어야 한다. public 키워드를 쓰면, 부모 클래스의 public 멤버 변수를 public 권한으로 사용할 수 있다. 임의적으로 묶을 때 사용한다고 하는데, 거의 안써서 자세히 알고 있을 필요는 없다. 상속 클래스의 메모리 parent 클래스를 상속한 child 클래스를 만들게 되면 parent 클래스부터 메모리를 잡고, 그 후에 child 클래스 메모리를 잡는다. 그래서 parent 포인터에 child 주소값을 넣을 수 있다. Parent 포인터이기 때문에, Child 객체의 주소값을 받았더라도 Parent 부분만 사용 가능하다. #inc..
· 기타/C++
조립 구현 2가지 다른 클래스의 기능을 사용하고 싶을 때, 2가지 방법이 있다. 상속 관계, 포함 관계가 있는데 각각의 사용법과 차이점을 정리해보았다. 1. 상속 관계로 구현 구체화를 시킬 때, 구체화된 클래스도 같이 추가된다. class C_CHILD : public C_PARENT { }; 예시) 기존에 (A 몬스터)가 있다. (B 몬스터), (C 몬스터)가 기획적으로 추가된다. -> (몬스터를 상속받는 B 클래스), (몬스터를 상속받는 C 클래스)를 추가해야 한다. // 기존 class AAA : public C_MONSTER // 몬스터 클래스에는 기본적인 정보들이 들어있다고 가정. { }; // 추가된다면... class BBB : public C_MONSTER // BBB 클래스 생성 { };..
· 기타/C++
복사 생성자 클래스의 call by value를 지원하기 위해 기본으로 제공되는 생성자이다. class C_TEST { public: C_TEST(); // 기본 생성자 C_TEST(const C_TEST &other); // 복사 생성자 }; 복사생성자가 불리는 타이밍은 1. 대입 연산을 할 때 (직접 복사를 할 때) 2. 매개 변수로 사용될 때 (call by value) 3. 리턴 타입일 때 (call by value) 3개로 외우지 말고, 대입 연산 또는 call by value일 때 2개로 생각하면 편하다. 흔히 하는 복사 생성자 실수 1. 매개 변수의 자료형을 클래스(or 구조체) 자료형으로 받는 실수. 클래스나 구조체들은 변수에 비해 메모리의 크기가 크기 때문에, 복사 생성자로 넘기면 끔찍한..
· 기타/C++
메모리 관리하는 법 3가지 1. 메모리 풀 한번에 많이 잡아놓고, 필요한만큼 쓰다가 한번에 삭제하는 방식. 2. 매니저 매니저가 메모리를 잡아주고, 빌려가는 형식으로 만드는 방식. 이 방식이 젤 많이 쓰이는 것 같다. 3. 스마트포인터 알아서 해주는 방식. 일반 포인터보다 조금 느리기 때문에, 연산 속도가 필요하다면 일반 포인터를 쓰는 게 낫다. c++ 장점은 메모리 관리니까 일반 포인터를 쓰는 게 좋을 듯 하다. 메모리 누수잡기 https://docs.microsoft.com/ko-kr/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2019 CRT 라이브러리로 메모리 누수 찾기 - Visual Studio C/C++ 디..
· 기타/C++
레퍼런스 변수에 이름을 하나 더 만들어 줄 수 있다. #include int main() { int nData{}; int &ref = nData; ref = 100; printf("%d\n", nData); // 100 출력 } 주의 사항 #include int main() { int nData{}; // int &ref; // 오류!! int &ref = nData; // 선언하면서 대입해야 함. ref = 100; // ref를 부르면 nData를 부르는 것과 같다. printf("%d\n", nData); // 100 출력 } 레퍼런스와 포인터 차이 1. 레퍼런스는 NULL값이 존재하지 않는다. (포인터는 NULL값 있음.) 레퍼런스는 선언하면서 바로 값을 대입하기 때문에, NULL값 없음. 2...
· 기타/C++
Malloc, New 키워드의 차이 동적 할당을 할 때에는 Malloc과 New 키워드를 사용할 수 있는 데, 2가지의 차이점이다. #include int main() { // 둘 다 동적할당임. malloc // 생성자 호출 없이 메모리 잡음. c언어에서 쓰던 함수. new // 생성자 호출 해 줌. 내부에서 malloc을 쓰고, 생성자도 불러준다. } 해제 할 때는 free랑 delete 키워드가 있는데, free는 소멸자 안 불러준다. delete는 소멸자 호출하고 삭제한다. C++에서는 new, delete 키워드를 사용하면 된다. 동적할당 예시 코드 일반 변수 #include int main() { int *p{}; p = new int{}; *p = 100; printf("%d\n", *p);..
· 기타/C++
이전 글인 2020/07/10 - [기타 공부/C++] - [C++] 클래스 기본 동작 개념 에서 총 5단계로 나누었다. 1. 생성 2. 준비 3. 사용 4. 해제 5. 삭제 여기서 우리는 1. 생성과 2. 준비에 대해서 알아보겠다. 보기 편하게 [1. 생성 단계] [2. 준비 단계] 처럼 단계를 표현하겠습니다. 이렇게 완전 구분해서 안 외워도 됌. 흐름을 이해하려고 개념적으로 구분했음. 생성자란? Constructor 객체가 처음 생성될 때 호출된다. 클래스명과 똑같이 이름을 지어야 한다. #include class C_TEST { private: int m_nData; public: C_TEST(); // 생성자 선언입니다. void setData(int nData); void getData(int ..
· 기타/C++
클래스는 총 5단계로 동작하는 것으로 구분할 수 있다. 1. 생성 2. 준비 3. 사용 4. 해제 5. 삭제 예시 클래스 #include class C_TEST { private: int m_nData; public: void init(int nData); void setData(int nData); int getData(); }; 1. 생성 단계 생성 단계에서는 클래스의 존재를 만든다. (메모리를 잡는다.) int main() { C_TEST cTest{}; // 생성 } 2. 준비 단계 변수들을 초기화해준다. ( 정해진 건 아니지만, init 이라는 이름으로 함수를 만들자. ) 생성과 준비 단계를 분리하지 않으면 나중에 클래스와 클래스를 조립할 때 힘들 수 있다. void C_TEST::init(in..
푸쿠이
'기타/C++' 카테고리의 글 목록