각 클래스별로 상속관계를 알아봤으니 이제 함수 오버라이딩과 오버로딩에 대해서 알아보고 Virtual 함수의사용처에 대해서도 알아보도록 하겠습니다. 먼저 용어부터 확인해보도록 하겠습니다. 오버로딩 - 매게 변수의 자료형이나 매게 변수 갯수가 다른 같은 함수 이름으로 여러번 정의하는것오러다이딩 - 이미 있는 함수를 새롭게 재정의 하는 것.(클래스 상속간에 기초 클래스에 정의된 함수를 같은 이름으로 유도 클래스에서 재정의 하는 것) 처음에 클래스간의 함수 이름이 다를 경우 이를 딱히 고민하지 않아도 되지만, Render 나 init , release 같은 함수가 공용되게 사용되거나 같은 함수명을 사용하는 경우라면 필요하게 됩니다. 그럼 먼저 코드를 확인해보겠습니다. 1. 상속 오버라이딩 outText라는 함수..
프로그래밍
클래스를 사용하면서 객체 포인터를 많이 사용하게 된다. (클래스를 가리키는 포인터)이에 해당 관계에 대해서 소스를 작성하면서 알아보자. [ IS-A 관계 ] 이전에 IS-A 관계를 떠올려 보면 A의 객체는 B이고 B의 객체는 C이다.즉 C는 A의 객체 이다. 그럼 아래와 같은 코드는 정상적으로 작동될 것이다. [결과] a,b,c가 A 클래스 포인터이기 때문에 A 클래스의 객체를 가르켜도 무방하다.즉, B,C의 클래스를 가르켜도 무방하다. 또한 같은 A클래스의 포인터 이지만 각기 다른 클래스 객체를 가리키므로 메모리 주소는 각기 상이하다. 그럼 B 클래스 포인터를 A 객체를 가르키면 어떻게 될까? 위에서도 이야기 했지만 IS-A 관계에서는 B는 A다 라는 말은 성립되지만, A는 B다 라는것은 성립되지 않는..
상속은 유도 클래스는 기초 클래스가 지니는 모든것을 지니고, 또한 유도 클래스만의 특성이 정해진다.이 처럼 클래스의 상속에서는 하나의 베이스가 되는 기초 클래스와 유도 클래스만의 관계가 성립된다. 그렇다면 적절한 상속 관계란 무엇이 있을까? * IS-A 관계 IS-A 관계란 영어에서 is a( "~ 이다.") 라는것으로 상속관계에서 유도 클래스와 기초 클래스와의 적저한 관계를 표현하는 것을 말한다. (상속의 깊이를 더하기 위해서..) Human Is a Tom [사람은 톰이다 (X)] -> 사람이 모두 톰이 될 수는 없다.Tom Is a Human [톰은 사람이다 (O)] -> 톰은 사람이 될 수 있다(사람이다) 위 처럼 각 클래스간에 일종의 상위 개념으로 이해하면 될 것이다.다른 예로는 철수는 아버지의..
C++ 구조체에 멤버 변수를 사용하는것에 있어서 직접참조와 간접참조를 나눌수 있습니다. 직접참조를 하는 경우 [.] 을 사용하고 간접참조는 [->]를 사용합니다. [ (*ptStruct).a = value) 식을 사용하지만 번거롭기에 ->를 사용합니다. (같은 뜻)] 왜 간접참조를 하는것일까? 궁금하지 않을 수 없었습니다. 괜히 있어보여서??? 그런것도 아닐텐데 말이지요..이에 대해서 몇가지 테스트를 통해서 알아보도록 하겠습니다. 일단 왜 굳이 포인터를 사용해서 간접참조를 하는것인가? 1. 구조체의 크기의 차이가 발생한다. [결과] 구조체 NUM의 경우 멤버 변수의 갯수만큼 크기가 잡힙니다. 하지만 구조체 포인터의 경우는 4바이트 입니다.(당연한것...) 만약 많은 양의 데이터가 포함된 구조체라면 간접참..
API를 공부하다보니 함수가 재정의 되고 치완되는 값이 많은데 도대체 #define 설정을 그저 천저치 명령어로가볍게 넘어가서 혼란이 올때가 있어 다시 정리해봅니다. #define은 말그대로 어떤 대상을 치환하여 설정된 값으로 변경해줍니다.아래 예제와 같이 간단한 숫자를 미리 설정할 수도 있습니다. #include #define pi 3.1415167 void main(){printf(" %f ", pi);} //출력 결과 3.1415167 또는 하나의 대입뿐만 아니라 수식으로도 활용할 수 있습니다. #include #define PLUS(x,y) x+y void main(){int Number = PLUS(5,5)printf(" %d" , Nubmer);} //출력 결과10 다만, 복잡한 대입연산의 경..