본문 바로가기

기초83

C++ 기초 : 클래스를 이용한 배열 구조체로 만들었던 가변 배열을이번에는 클래스로 만들어 보겠습니다.  우선 단축키 Ctrl + Shift + X 를 입력하여 클래스 마법사를 열어 주겠습니다. 이후 '클래스 추가' 버튼을 눌러 클래스 이름을 입력해 주면해당 이름을 가진 헤더 파일과 소스 파일이 만들어집니다.        그리고 cArr.h 파일에  cArr의 멤버 변수와 생성자와 소멸자를 선언하겠습니다.  전역 함수를 구현할 때, 헤더 파일에 정의까지 해 놓으면문제가 발생했었죠? 다른 소스 파일에서 해당 헤더 파일을참조하게 되면, 참조한 모든 소스 파일에 같은 함수가 생겨 함수가 여러 개로 인식되는 문제가 발생했었습니다. 그래서 선언과 정의는 따로 분리하는 게 좋습니다. 물론 클래.. 2024. 4. 14.
C++ 기초 : 클래스 (3) int i = 0; int i2 = 10; i = i2; 위와 같은 코드가 있습니다. 변수 i에 변수 i2의 값을 복사하여 넣겠다는 거죠. 이것을 '대입'이라고 합니다.  그럼 아래와 같은 코드는 어떤가요? cMy형 객체 c에 cMy형 객체 c2의 값을 대입하였습니다.  오류도 발생하지 않고  c2의 멤버 m_i의 값이 c의 멤버 m_i에복사된 것이 보입니다.  대입을 했을 뿐인데 알아서객체 c2의 멤버 변수의 값이객체 c의 멤버 변수에 대입되었습니다. 어떻게 이런 일이 가능할까요?  아래 코드에서 14 ~ 19번째 줄을 보면대입 연산자라는 것이 있습니다. 대입 연산자는 따로 만들어 주지 않아도 대입 연산이 발생할 수 있기 때문에컴파일.. 2024. 4. 13.
C++ 기초 : 클래스 (2) 아래 코드는 가변 배열을 구조체로 구현한 것입니다. 가변 배열을 위한 함수들을 보면 공통적으로 어떤 가변 배열에 해당 함수를 적용할지선택하기 위해 가변 배열의 주솟값을 받고 있습니다.  그런데 클래스의 경우 멤버 함수 SetInt를 보면 인자로 값 하나만 받고 있습니다. 그럼 main 함수에서 cMy형 객체 3개를 만든 후SetInt 함수를 호출합니다. SetInt 함수를 어떤 객체에적용할 것인지 컴파일러는 어떻게 아는 걸까요? 객체마다 주솟값이 존재할 것이고 이 주솟값을 찾아가서그곳에 있는 객체에 SetInt 함수를 적용하겠죠.  그럼 그 주솟값은 어디에 있을까요? 바로 13번째 줄에서 볼 수 있듯이 this라는 키워드에 있습니다. 이를 this 포인터라.. 2024. 4. 13.
C++ 기초 : 클래스 (1) C++ 언어에서는 기존 C 언어에서는 없던클래스라는 개념이 추가되었습니다. 클래스는 사용자가 정의하는 자료형입니다.C 언어에서의 구조체와 같은 역할이죠. 물론 C++ 환경에서도 구조체를 사용할 수 있습니다.C++ 문법에서는 구조체의 이름을 재정의하여 사용할필요 없이 struct 키워드를 통해 바로 사용할 수 있습니다.       클래스도 구조체와 마찬가지로 멤버로 구성되는데해당 멤버를 공개할지 공개하지 않을지 선택할 수 있습니다.private로 선언된 멤버는 공개하지 않고,public으로 선언된 멤버는 공개됩니다. 예를 들어 cMy라는 클래스를 정의하였고해당 클래스의 멤버는 int형 변수 m_i와 float형 변수 m_f가 있습니다. m_i는 priv.. 2024. 4. 13.
C++ 기초 : 리스트 (3) Linked List(연결형 리스트)와가변 배열의 큰 차이점은 메모리의 구조입니다. 가변 배열은 메모리가 연속적으로 할당되어 있고연결형 리스트는 메모리의 공간이 모두 떨어져 있으나포인터를 통해 연결하고 있는 형태이죠. 그래서 가변 배열은 n번째 데이터에 접근하는 게 쉽습니다.메모리가 연속적으로 할당되어 있어 3번째 데이터에접근하고 싶다면 주소 연산(+3)을 통해 접근하기가 용이하죠. 그러나 단점도 있습니다. 만약 가변 배열의 맨 앞 공간에 데이터를 추가하고 싶다면 기존 데이터를 모두 뒤로 한 칸씩복사하여 붙여넣고 맨 앞에 공간이 생기면 그제서야 비로소데이터를 넣을 수 있죠. 만약 데이터가 1000개가 있다고 하면 이 1000개의 데이터를하나씩 뒤로 밀고 데이터를 넣어야 하.. 2024. 4. 12.
C++ 기초 : 리스트 (2) 아래 코드는 연결형 리스트를 구현하기 위해구조체를 선언한 LinkedList.h 파일입니다. 6번째 줄이 오류가 발생하는 부분입니다. 그래서 아래 코드로 작성해야 하죠. 이유는 구조체를 사용할 때 'struct _tagNode'의 형태로 사용해야 했는데 편하게 쓰기 위해 구조체 선언 마지막에 별명을 붙여줬죠.위 코드에서는 'tNode'라는 별명을 붙여줬네요. 이러다 보니 6번째 줄은 아직 tNode라는 것이 만들어지기 전입니다.그래서 멤버를 선언할 때 별명을 바로 사용하지 못하고원래 이름인 'struct _tagNode' 형태로 멤버를 선언해야 하는 것이죠.      이제 main.cpp에서  연결형 리스트의 역할을 할 객체를 선언하겠습니다. 이를.. 2024. 4. 11.