구조체 VS 클래스 구조체(struct)와 클래스(class)는 C++에서 데이터를 그룹화하고 캡슐화하기 위한 두 가지 주요 방법이다. 이 둘은 많은 면에서 유사하지만 몇 가지 중요한 차이점이 있다. 공통점 멤버 변수와 함수 포함: 클래스와 구조체 모두 멤버 변수와 함수를 포함할 수 있다. 캡슐화: 멤버 변수와 함수를 하나의 단위로 캡슐화할 수 있다. 인스턴스 생성: 클래스와 구조체 모두 인스턴스를 생성하여 사용할 수 있다. 차이점 1. 기본 접근 권한 구조체(struct): 기본적으로 모든 멤버가 public이다. 클래스(class): 기본적으로 모든 멤버가 private이다. // 구조체 struct Vector { int x; // public int y; // public }; // 클래스 cla..
Language
Vector 클래스의 멤버 함수 // Vector.h class Vector { public: void SetX(int x); void SetY(int y); int GetX() const; int GetY() const; void Add(const Vector& other); private: int mX; int mY; }; const의 의미 바꿀 수 없음. // const 변수 const int LINE_SIZE = 20; LINE_SIZE = 10; // compile error // const 메서드 int GetX() const; method란? 오브젝트 안의 클래스 안의 함수를 method라고 부른다. 그 안에 포함되지 않는 전역 함수를 함수라고 부른다. 이 둘은 혼용되기도 하며, 신경 쓰지 ..
소멸자 // vector.h class Vector { public: ~Vector(); private: int mX; int mY; }; // vector.cpp Vector::~vector() { } 소멸자는 개체가 지워질 때 호출된다. 클래스 내에서 메모리 할당이 발생하면 오브젝트가 소멸될 때 해당 메모리를 해제해주어야 한다. 가상 소멸자 매우 중요한 개념이며, 나중에 자세히 다룰 예정입니다. 소멸자를 이용하여 메모리를 해제하지 않는다면. // mystring.cpp Mystring::Mystring() : mLength(0) , mCapacity(15) { mChars = new char[mCapacity + 1]; } // main.cpp void Foo() // main()이 호출한다고 가정 ..
생성자 예제 class Vector { public: // 매개변수 없는 생성자 Vector() { mX = 0; mY = 0; } private: int mX; int mY; }; → 자바에서는 private 접근 제어자의 변수들을 먼저 보여준다 헤더 파일과 소스 코드 파일이 분리되어 있지 않다. 라이브러리를 사용하는 사람들에게는 private 함수는 접근할 수 없기 때문에 아무 의미가 없다. 소스 코드 파일을 볼 수는 없지만, 헤더 파일을 통해 함수의 호출 가능 여부를 확인할 수 있다. → C++에서는 public을 먼저 보여준다. 라이브러리를 사용하는 사람들은 어떤 변수를 사용할 수 있는지 확인한 뒤 함수를 만드는 것이 더 편리할 수 있다. 소스코드를 볼 수 없더라도 헤더파일을 보고 어떤 함수를 호..
Instance 생성 방법 // Stack에 만들기 (Heap 보다 빠름) Vector a; // Heap에 만들기 (느림) Vector *b = new Vector(); 스택 메모리 간단한 설명 예약된 로컬 메모리 공간(일반적으로 1MB 이하) 함수 호출과 반환이 스택 메모리에서 일어난다. 스택 포인터를 단순히 옮기는 것. 메모리 할당 및 해제 필요 없다. 스택에 할당된 메모리는 범위를 벗어나면 사라진다. 변수 및 매개변수 크기는 컴파일 도중에 알 수 있다. 큰 개체를 많이 넣으면 스택오버플로우가 일어날 수 있다. 성능이 느려질 수 있다. 힙 메모리 간단한 설명 전역 메모리 공간(크다) 연속된 메모리 블록을 찾아야 한다. 프로그래머가 메모리 직접 할당 및 해제 메모리 누수 주의 코드 예제 스택에 생성하..
Vector 클래스 만들기 class Vector { private: int mX; // 멤버 변수 'x' int mY; public: // 생성자 Vector(int x, int y) : mX(x), mY(y) {} protected: // 자식 클래스에서 접근 가능 std::string mType; }; 기본 접근 권한 C++에서의 기본 접근 권한은 private이다. 따라서 클래스 내의 멤버 변수와 함수는 기본적으로 private으로 간주된다. 접근 제어자(Access Modifier) public: 누구나 접근 가능한 영역. protected: 자식 클래스에서 접근 가능한 영역. private: 해당 클래스 내에서만 접근 가능한 영역. 접근 제어자의 역할 public: 클래스 외부에서 사용할 수 ..
C++에서 파일 입출력 헤더 파일 : 파일 입출력 작업을 위한 헤더 파일. ifstream: 파일에서 읽기 위한 입력 파일 스트림. ofstream: 파일에 쓰기 위한 출력 파일 스트림. fstream: 읽기와 쓰기 모두를 위한 파일 스트림. 파일 스트림은 , 조정자(manipulator) 등을 지원한다. 파일 열기 open() 메서드 fin.open("HelloWorld.txt", ios_base::in | ios_base::binary); 모드 플래그 in, out, ate (끝에서), app (덧붙이기), trunc (재설정 및 쓰기), binary. 파일 닫기 ifstream fin; /* 코드 */ fin.close(); 스트림 상태 확인 close(): 각 스트림마다 사용 가능한 닫기 메서드...
문자열(string) char buffeer[256]; cin.getline(buffer, 256); // 더 나은 방법 #define BUFFER_SIZE 256; char buffeer[BUFFER_SIZE]; cin.getline(buffer, BUFFER_SIZE); // 또 다른 방법 const int BUFFER_SIZE = 256; char buffeer[BUFFER_SIZE]; cin.getline(buffer, BUFFER_SIZE); 위 코드의 문제점 아무것도 읽지 못했을 때 한 줄의 문자가 256자 이상일 때(버퍼의 크기가 충분히 크지 않을 때) std::string 클래스 std::string 클래스를 이용한 문자열은 길이가 증가할 수 있다. #include std::string n..