본문 바로가기

프로그래밍/C++34

가상 복사 생성자 상황에 따라서 새로 생성한 이 후 그 내용을 복사해 주고 싶다면 어떻게 할까? 가상 복사 생성자, 어디서 뭘 설명해야 할지 모르겠지만, 객체 포인터 배열 A와 객체 포인터 배열 B가 존재 한다고 했을 때 A에 값을 삽입 후 B = A; 를 해주었을 때 B에 A의 내용이 그대로 복사 되길 원한다고 하자. 그때 사용한다. 나머진 소스 코드로 ㅠㅠ #include class Mammal { protected: int itsAge; public: Mammal() : itsAge(1) { std::cout 2010. 4. 3.
virtual(가상) virtual 이라는 키워드는 클래스에서 사용을 하게 되는데 존재 하지만 존재 하지 않는? 소스로 설명하겠다. #include class AA { public: // 순수 가상 함수 virtual void ShowData() = 0; virtual ~AA() { std::cout 2010. 4. 3.
함수 오버라이딩(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.
객체 포인터 객체 포인터, 간단하게 보면 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.