본문 바로가기

C130

함수 오버라이딩(overriding) 오버로딩과 비슷한 그 이름 오버라이딩, 하지만 엄연히 틀리다. 한글로 표현하자면, 음, 오버로딩 = 함수 중복 정의? 오버라이딩 = 함수 재 정의? 정도로 표현 할 수 있을까 모르겠다. #include class AA { public: void ShowData(){std::cout 2010. 4. 3.
객체 레퍼런스 객체 포인터와 큰 차이는 없다. 객체 포인터 처럼 ClassA의 레퍼런스는 ClassA 객체뿐만 아니라 ClassA 클래스를 상속하는 하위 클래스 객체도 참조가 가능하다. 라고 보면 된다. 말이 어렵지만 소스를 보면 크게 어렵지 않다. #include class A { public: void showData(){ std::cout 2010. 4. 3.
numeric_limits. 각 타입의 최대, 최소값을 구해주는 STL #include #include void main() { // int 형의 최대, 최소값 std::cout 2010. 4. 2.
auto_ptr의 개념. #include 안에 존재하는 오토포인터(auto_ptr) 사용하는 이유는 런타임중 여러번의 delete를 해줄때 생기는 메모리릭에 대해서. 프로그래머가 delete를 해주지 않더라도. 자동으로 메모리를 지워주는 기능을 가지고 있다. 주의점은 소유권이라는것이 존재 하는데. 이는 객채 1개는 오로지 1개의 오토포인터만이 가질 수 있다. 기존의 포인터는 한 객체를 여러 포인터들이 가르킬 수 있었지만, 이것은 그럴 수 없다. 사용법. #include #include class ClassA { public: int a; }; void main() { std::auto_ptr p1(new ClassA); std::auto_ptr p2; p1->a = 10; // p1의 a std::cout a 2010. 4. 2.
객체 포인터 객체 포인터, 간단하게 보면 class를 가르키는 포인터로 볼 수 있겠지만, 이거, 생각보다 재밋으면서도 어렵다. 일단 따로 보자. int n; int* pn = &n;​ int n을 만들고, 포인터 pn이 가르킨다. (n의 값이 쓰레기인건 신경쓰지 말자) 그렇다면 여기서, 의문을 가져 보자. char* c = (char*)new int; int* n = (int*)new char; delete c; delete n;​ 어떻게 될까? 컴파일에서 문제도 일어 나지 않고, 실행도 된다. 여기서 파악해야 할 것은, 메모리의 크기이다. char* c 은 1바이트 int* n은 4바이트를 가르키게 되는데, 저런식으로 하게 되면 c는 new int의 1바이트 부분만 가르키게 되고, n은 새로 생성된 1바이트를 넘쳐.. 2010. 3. 29.
IS-A, HAS-A 관계 IS-A, HAS(HAVE)-A 관계가 뭔가 문법적이고 코드적인 부분은 아니다. 약간은 개념적이고 추상적인 내용이지만, 딱히 어려운 내용은 아니니 특별히 소스코드 없이 개념적으로 한번 훑어 보자. class 사람 class 학생 : public 사람 다음과 같은 형태가 IS-A 관계이다. "모든 학생은 사람이다." 라는 말을 하였을 때 어색하지 않은 관계. 하지만 "모든 사람은 학생이다" 라고 했을 때에는 올바르지 않다. 이렇게 하위 클래스가 상위 클래스를 "포함" 하고 있는 관계를 IS-A 관계라 한다. 그렇다면 HAS-A 관계는 무엇인가. "사탕을 소유한 어린 아이" "무기를 소지한 강도" "총을 가지고 있는 경찰" 정도가 HAS-A 관계라고 볼 수 있다. 사탕은 강도도, 어린 아이도, 경찰도 모두 .. 2010. 3. 27.