메서드 오버로딩 class X { public: void Print(int score); void Print(const char * name); void Print(float gpa, const char *name); }; 메서드 오버로딩은 같은 이름의 메서드에 대해 다양한 매개변수를 가질 수 있도록 하는 기능이다. 불러오는 매개변수에 따라 어떤 메서드가 호출될지 결정된다. 함수 오버로딩 함수 오버로딩은 같은 이름의 함수에 대해 다양한 매개변수를 가질 수 있도록 하는 기능이다. 매개변수 목록을 제외하고는 동일한 이름의 함수이며, 반환형이 다르더라도 상관없다. 위의 코드에서 int Print(int score)는 오류가 발생한다. 함수 오버로딩은 매개변수의 타입, 순서, 개수를 고려하여 매칭을 수행하는데,..
Programming
복사 생성자 인스턴스의 사본을 만드는 것. 만약 들고 있는 것이 레퍼런스라면, 레퍼런스의 주소값을 복사해줄 것인지의 문제가 있다. // Vector.h class Vector { public: Vector(const Vector& other); private: int mX; int mY; }; // Vector.cpp Vector::Vector(const Vector& other) : mX(other.mX) , mY(other.mY) // private 이지만, 같은 class 이기 때문에 접근 가능하다. { } 같은 클래스의 다른 개체를 이용하여 새로운 개체를 초기화하는 것은 다음과 같다. Vector(const Vector& other); Vector a; // default constructor 또..
구조체 VS 클래스 구조체(struct)와 클래스(class)는 C++에서 데이터를 그룹화하고 캡슐화하기 위한 두 가지 주요 방법이다. 이 둘은 많은 면에서 유사하지만 몇 가지 중요한 차이점이 있다. 공통점 멤버 변수와 함수 포함: 클래스와 구조체 모두 멤버 변수와 함수를 포함할 수 있다. 캡슐화: 멤버 변수와 함수를 하나의 단위로 캡슐화할 수 있다. 인스턴스 생성: 클래스와 구조체 모두 인스턴스를 생성하여 사용할 수 있다. 차이점 1. 기본 접근 권한 구조체(struct): 기본적으로 모든 멤버가 public이다. 클래스(class): 기본적으로 모든 멤버가 private이다. // 구조체 struct Vector { int x; // public int y; // public }; // 클래스 cla..
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: 클래스 외부에서 사용할 수 ..