본문 바로가기

스터디93

[ C++ ] 컨트롤(Control)클래스 / 핸들러(Handler) 클래스 토끼와 거북이의 경주 프로그램으로 예로 들겠다. ( 글쓴이가 거북이를 좋아해서 딱히 다른 예제가 떠오르지 않는다... ) 간단한 프로그램이기에 코드도 별거 없다. 그냥 이해를 위한 예제라고 생각하자.. ㅎㅎ 거북이 클래스 class Turtle { public: int vel; // 속도 int x; // 위치 public: Turtle(int v) : vel(v), x(0) { } void Run() { x+=vel; cout 2019. 9. 26.
[ C++ ] static 멤버변수( 클래스 변수 )와 static 멤버함수, mutable C++에서의 static은 C언어에서의 static이 그대로 통용된다. C에서의 static 특징 - 전역 변수에 선언된 static은 선언된 파일 내에서만 참조를 허용한다. - 함수 내에 선언된 static은 한 번만 초기화되고, 함수를 빠져나가도 소멸되지 않는다. 먼저 A 클래스와 B 클래스 두개가 있다고 치자. A 클래스는 Plus_1 함수 호출할 때마다 숫자를 1씩 더하고 B 클래스는 Plus_2 함수 호출할 때마다 숫자를 2씩 더한다. 그럼 이를 전역변수를 사용한 코드를 보겠다. 그럼 여기서 확인할 수 있는 점은 a_num은 클래스 A를 위한 전역 변수이다. b_num은 클래스 B를 위한 전역 변수이다. 즉, a_num은 A형 객체들이 공유하는 변수이고 b_num은 B형 객체들이 공유하는 변수이.. 2019. 9. 26.
[ C++ ] 클래스의 friend 선언, 함수의 friend 선언 friend는 친구라는 뜻이다. 근데 클래스의 friend 선언은 무슨 소리일까? A라는 클래스와 B라는 클래스가 있다고 가정하자. 근데 A 클래스가 " B 클래스는 제 친구예요. 믿을만합니다.. ㅎㅎ"라고 말했습니다(선언했습니다). 그럼 B클래스는 A클래스의 private에 접근 가능하게 된다. 즉, B클래스 내에 있는 A형 객체는 private 접근 가능하게 된다. 그럼 직접 코드로 보자. 클래스 A 내에 friend class B;으로 B가 자신의 친구임을 선언했다. (friend 선언은 클래스 내에 어디든 위치할 수 있다.) 그래서 클래스 B는 A의 private한 num을 호출할 수 있다. ( B도 클래스 A를 친구라고 선언해두면 반대로 A가 B의 private 접근도 가능하다! ) 또한 클래스.. 2019. 9. 26.
[ C++ ] 깊은 복사( deep copy )와 얕은 복사 ( shallow copy ) 얕은 복사( shallow copy )는 디폴트 복사 생성자에 의한 멤버 대 멤버의 복사 방식을 말한다. 하지만 이는 멤버 변수가 힙의 메모리 공간을 참조하는 경우에 문제가 된다. 예를 보자. A형 객체 a와 b가 있고, a는 객체 생성 시 초기화를 했다. 반면 b는 a의 디폴트 복사생성자에 의해 멤버 대 멤버 복사가 일어났다. 즉, 얕은 복사가 일어났다. 근데 예상된 결과와는 다르게 소멸자 호출이 한번 일어났다. 이유는 char형 포인터인 name 때문이다. 멤버 대 멤버 복사이기 때문에 객체 a의 name을 가리키는 주소 값을 b도 같이 할당받아, 두 객체가 같은 문자열을 참조하는 문제가 생긴다. 그래서 만약 객체 a가 먼저 소멸된다고 가정하면, a의 소멸자 호출이 일어나면 name을 delete 해.. 2019. 9. 26.