본문 바로가기

프로그래밍162

객체 레퍼런스 객체 포인터와 큰 차이는 없다. 객체 포인터 처럼 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.
상속의 형태 여러 글을 쓰는것 보단 소스를 보는게 이해가 훨씬 빠를 듯 하다. #include // Inher_A 클래스, // 각각 private, protected, public을 가지고 있다. class InHer_A { int private_int_a; protected: int protected_int_a; public: int public_int_a; // 값을 바꾸기 위한 SetData함수 void SetData() { // 3개의 변수 모두 내부에서 변경하는것에 대해 문제가 없다. private_int_a = 1; protected_int_a = 2; public_int_a = 3; } }; // Inher_A클래스를 public 상속을 한 Inher_B 클래스 class InHer_B : public.. 2010. 3. 26.