오버라이딩 (overriding) 파생 클래스는 상속을 받을 때 명시한 접근 제어 권한에 맞는 기초 클래스의 모든 멤버를 상속받는다. 이렇게 상속받은 멤버 함수는 그대로 사용해도 되고, 재정의하여 사용할 수도 있다. 멤버 함수의 동작만을 재정의 하는 것이므로, 함수의 원형은 기존 멤버 함수의 원형과 같아야 한다. 오버로딩과 오버라이딩 오버로딩 : 새로운 메서드를 정의하는 것 오버라이딩 : 상속받은 기존의 메서드를 재정의 하는 것 오버라이딩 조건 파생 클래스에서 직접 오버라이딩 가상 함수를 이용해 오버라이딩 파생 클래스에서 오버라이딩 클래스의 상속 #include #include class Base { std::string s; public: Base() : s("기반") { std::cout
[ 얕은 복사 (shallow copy) ] 값을 복사하는 것이 아닌, 값을 가리키는 포인터(주소 값)를 복사하는 것이다. 변수 생성에서 대입 연산자를 이용한 값의 복사는 문제가 되지 않지만, 객체에서는 문제가 발생할 수 있다. 변수 생성 시 얕은 복사 int x = 10; int y = x; 객체 생성 시 얕은 복사 class Simple { private: int num1; int num2; public: Simple(int n1, int n2) : num1(n1), num2(n2) {} void ShowSimpleData() { std::cout
[ string ? ] C++ STL에서 제공하는 클래스로 문자열을 다루는 클래스이다. C에서 char*, char[]로 문자열을 다뤘다면, C++에서는 string을 통해 문자열을 하나의 변수처럼 사용할 수 있다. char*, char []과 다르게 문자열 끝에 '\0' 문자가 들어가지 않고, 문자열의 길이를 동적으로 변경이 가능하다. ● std::cout std::cout은 Stream buffer에 대한 출력을 제어하기 위한 전역 객체이다. 문자열을 출력하려면
데이터를 처리할 때 보통 Switch case문을 사용한다. 하지만 데이터의 종류가 많아지게 되면 case가 수백 개가 넘어가는 경우가 생긴다. 이 경우 함수 포인터를 통해 Swich문을 제거해 줄 수 있다. Switch문을 이용해 Packet을 처리하는 방식은 case가 많아질수록 성능이 저하될 수 있음. 관리도 어려워지고 가독성도 떨어짐. Switch문을 함수 포인터로 관리할 수 있도록 함. 예를 들어, 아래와 같이 Swich case문을 함수 포인터 형태로 바꿔보자. void Model::ProcessMessage(const int idx, const char* data) { switch(idx) { case 0: ProcessA(data); break; case 1: ProcessB(data); ..