※ 주의 사항 ※ 이 글의 목적은 '지식의 전달'이 아닌 '학습의 기록'입니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. C++에서는 함수뿐만 아니라 연산자도 오버 로딩이 가능합니다. 그런데 연산자의 오버 로딩은 좀 생소하게 느껴질 수 있습니다. 하지만 기본 개념은 매우 단순하니 어렵지 않을 것입니다. 함수가 오버 로딩되면, 오버 로딩된 수만큼 다양한 기능을 제공하게 됩니다. 즉, 이름은 하나지만 기능은 여러 가지가 되는 셈입니다. 마찬가지로 연산자의 오버 로딩을 통해서 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있습니다. 다음 예제를 살펴보겠습니다. #include using namespace std; class..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 다중 상속을 이해하기 앞서 다중 상속이란, 둘 이상의 클래스를 동시에 상속하는 것을 말합니다. 그리고 C++은 다중 상속을 지원하는 객체지향 언어입니다. 그런데 다중 상속은 제법 논란이 되는 문법입니다. 다중 상속에 대한 프로그래머들의 첫 번째 의견은 다음과 같습니다. "다중 상속은 득 보다 실이 더 많은 문법이다. 그러니 절대로 사용하지 말아야 하며, 가능하다면 C++의 기본 문법에서 제외시켜야 한다." 다음은 이보다 조금 더 부드러운 의견입니다. "일반적인 경우에서 다중 상속은 다양한 문제를 동반한다. 따라서 가급적 사용하지 않..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 지금까지는 객체 내에 멤버 함수가 존재한다고 설명해 왔습니다. 하지만 이는 사실이 아닙니다. 멤버 함수의 동작 원리 지금부터 구조체 변수와 전역 함수를 이용해서 클래스와 객체를 흉내 내보겠습니다. 이는 객체의 멤버 변수가 어떠한 형태로 구성되는지를 설명하기 위함입니다. 그럼 먼저 흉내 낼 모델이 되는 C++ 코드입니다. #include using namespace std; class Data { private: int data; public: Data(int num) : data(num) {} void ShowData() { cout
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 가상 함수 말고도 virtual 키워드를 붙여줘야 할 대상이 하나 더 있습니다. 바로 소멸자입니다. 즉, virtual 선언은 소멸자에도 올 수 있습니다. 먼저 다음의 예제를 살펴보겠습니다. #include #include using namespace std; class First { private: char* strOne; public: First(const char* str) { strOne = new char[strlen(str) + 1]; strcpy(strOne, str); cout
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번에 배우는 가상 함수는 C++에서 매우 중요한 위치를 차지하는 문법입니다. 뿐만 아니라, '오렌지 미디어 급여관리 확장성 문제'를 완전히 해결하는데 필요한 도구이기도 합니다. 객체 포인터의 특성 앞서 객체 포인터에 대해 배우면서, 객체 포인터는 해당 객체의 클래스를 직접 혹은 간접적으로 상속받는 다른 객체들을 가리킬 수 있다고 배웠습니다. 하지만 그러면서도 해당 객체 포인터는 유도 클래스의 멤버들에 접근하지는 못했습니다. 다시 예를 들어보겠습니다. Person 클래스와 Student 클래스가 정의되었습니다. Student클래스는..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 이번 Chapter에서는 객체지향에서 가장 중요하다고 할 수 있는 '다형성'을 공부합니다. 그리고 앞서 제시한 '오렌지 미디어 급여 관리 확장성 문제'를 해결하게 됩니다. 객체 포인터와 참조 관계 이전에 제시한 예제들을 통해서도 보았듯이, 클래스를 기반으로도 포인터 변수를 선언할 수 있습니다. 예를 들어 Person이라는 이름의 클래스가 정의되었다면, Person 객체의 주소 값 저장을 위해서 다음과 같이 포인터 변수를 선언할 수 있습니다. Person* ptr; ptr = new Person; 그런데 Person형 포인터는 Per..