* 문제 데이터를 관리하는 부모 클래스 Memory class가 있다. Memory class를 상속받는 자식 클래스 MyStack과 MyQueue class가 있다. MyStack class는 먼저 입력한 메모리가 나중에 메모리가 삭제되는 구조이고, MyQueue class는 먼저 입력한 메모리가 먼저 메모리가 삭제되는 구조이다. 동적 할당과 동적 바인딩을 이용하여 메모리 구조 프로그램을 작성하시오. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ..
* 순수가상함수(추상 함수) 순수가상함수는 함수 헤더만 존재하고 함수의 몸체는 없는 함수이다. 순수가상함수를 하나라도 가지고 있는 추상클래스(abstract class)라고 한다. 추상 클래스로는 객체를 생성 할 수 없다. 추상 클래스는 추상적인 개념을 나타내거나 클래스와 클래스 사이의 인터페이스를 나타내는 용도로 사용된다. 추상 클래스는 멤버 함수의 원형만을 정의하는 것이고 그 구현은 자식 클래스에서 하게 된다. 추상 클래스를 상속받는 자식 클래스는 반드시 순수가상함수를 구현해야 한다. 순수가상함수는 형식 정의문에서 가상 함수 선언문 뒤에 =0 을 명시한다. 또 자식 클래스에서 부모 클래스의 순수가상 함수를 재정의(오버라이딩)하지 않으면 추상 클래스가 되어 객체를 생성할 수 없다. 따라서 객체를 생성 ..
* 동적 바인딩 함수 호출을 실제 함수의 몸체와 연결하는 것을 바인딩(binding)이라고 한다. 바인딩에는 정적 바인딩과 동적 바인딩이 존재한다. 컴파일 단계에서 모든 바인딩이 완료되는 것을 정적 바인딩(static binding)이라고 한다. 반대로 바인딩이 실행 시까지 연기되고 실행 시간에 실제 호출되는 함수를 결정하는 것을 동적 바인딩(dynamic binding)이라 한다. 동적 바인딩을 사용하면 객체 지향의 중요한 특징 중 하나인 다형성을 구현할 수 있다. 즉 객체에 메시지를 보내면 객체가 메시지를 해석해서 가장 적절한 동작을 하게 된다. c++에서 가상 함수가 아니면 모든 함수가 정적 바인딩으로 호출된다. 정적 바인딩은 호출 속도가 빠르지만 호출 함수가 컴파일 단계에서 항상 결정되므로 유연성..
* 다형성 객체들의 타입이 다르면 똑같은 메시지가 전달되더라도 서로 다른 동작을 하는 것을 말한다. 즉, 똑같은 명령을 내리지만 객체의 타입이 다르면 서로 다른 결과를 얻는 것이다. 중요한 것은 메시지를 보내는 측에서는 객체가 어떤 타입인지 알 필요가 없다는 점이다. 실행시간에 객체의 타입에 따라서 자동적으로 적합한 동작이 결정된다. 다형성은 객체 지향 기법에서 하나의 코드로 다양한 타입의 객체를 처리하는 중요한 기술이다. * 가상상속(virtual) java에선 단일상속이 되지만, c++에선 다중상속이 가능하다. 다중상속을 하면 여러군데로 상속을 하러 가기 때문에 모호성이 발생할 수 있는데, 명확성을 중요시하는 c++에서 모호성이 발생하면 에러가 뜨게 된다. 다중상속으로 모호성이 발생했을때 가상상속으로..
c++ 을 이용해서 급여관리프로그램을 짜봤다. 급여관리프로그램 설계도는 이러하다. 입력 받은 Data 값을 넣는 돈, 정보, 시간 class들을 만들고 그 Data를 has~a 관계로 연결하여 Data를 받는 Data 보관 class를 만든다. 정규직class와 비정규직class를 구분하여 Data 보관 class를 상속 받는 class들을 만든다. 정규직과 비정규직 기능을 나누고 정규직과 비정규직 class의 데이터를 받는 데이터 관리(Data Managerment) class를 만들어 has~a 관계로 이어줬다. Data Managerment class는 모든 입력, 출력, 조회, 삭제 및 값 연산을 수행하는 class로 main에서 주는 메모리 갯수 인자를 받아 정규직 class의 객체, 비정규직 ..
* c++ 상속에는 3가지 상속이 있다. 1. private 상속 private란 자기 자신의 내부에서만 접근 할 수 접근지정자로 외부에서 접근 할 수가 없다. private로 자식에게 상속하면 어떤 접근지정자의 필드라도 자식에게 상속되는 순간 private로 넘어가게 된다. 거의 쓰지 않는 상속 방법이다. 2. protected 상속 protected란 자기 자신의 내부와 상속한 자식에게서만 접근 할 수 있다. protected 상속을 했을때, private로 상속을 넘기면 private로 상속 받고 protected와 public으로 상속을 넘기면 protected로 상속 받는다. has ~ a 관계로 상속된다. 3. public 상송 public이란 내부던 외부던 모두 접근이 가능한 공공 접근자다...
* has ~ a 관계 외부 에서 입력한 데이터를 데이터_관리_class를 통해 데이터_class에 넘기고 받을 수 있으며 다른 객체를 멤버로 선언한 관계이다. 이때 데이터_class는 입력된 데이터만 관리하며 외부에서 접근 할수 없는 구조로 되어 있다. 데이터_class는 오직 데이터_관리_class를 통해서만 전달받고 전송 할수 있는 구조이다. 따라서 데이터_class는 캡슐같은 구조로 외부로부터 데이터를 은닉, 보호 하고 있으며 외부에서는 데이터_class가 있는지 조차 알 수 없다. has ~ a 관계를 만들기위해선 조건이 있는데, 데이터_관리_class가 데이터_class를 연결하려면 데이터_class 타입의 객체가 반드시 존재해야 한다. has ~a 관계의 장점은 데이터를 은닉, 보호할 수 있..
* const(상수화 멤버) - c++에서는 멤버 필드 중에 값을 변경하지 못하는 상수화 멤버 필드와 메소드 내에서 객체의 상태를 변경하지 못하는 상수화 메소드를 지정할 수 있다. - 상수화 멤버 필드는 선언문 앞에 const 키워드를 붙여주고 상수화 멤버 메소드는 입력 인자를 명시하는 괄호 뒤에 const 키워드를 붙여준다. ex : int tistory() const; - 예를들어, 학생 생성 시 학번을 부여하고 이후에는 학번을 변경하지 못하게 하고자 한다면 상수화 멤버 필드로 사용할 수 있다. 상수화 멤버 필드는 생성자 정의문에서 초기화 기법을 사용하여 값을 지정해야 한다. 초기화 기법은 생성자 메소드의 입력 인자를 명시하는 함수 뒤에 콜론(:)을 붙인 후에 초기화할 멤버 이름을 명시하고 괄호에 초..
* class 구조 1. 생성자함수 2. 복사생성자함수 3. 소멸자 함수 4. 대입연산자 함수 * 소멸자 c++은 java나 c#과 달리 플랫폼에서 개체들을 관리하지 않는다. 따라서 c++에서는 생성한 개체의 소멸에 관한 책임을 개발자가 져야한다. 소멸자도 생성자처럼 직접 호출하지 않고 delete 연산자를 사용해야한다. 또한 소멸자는 생성자와 다르게 중복 정의할 수 없다. 소멸자도 개발자가 정의하지 않으면 컴파일러에 의해 디폴트 소멸자가 만들어진다. 하지만 개체 내부에서 동적으로 다른 개체를 생성하였다면 소멸자를 정의하여 동적으로 만든 개체를 소멸해야 한다. * 소멸자함수를 쓰는 이유 동적메모리를 할당 하고 난뒤 쓰레기값이 남게된다. 프로세스를 다 돌리고 난 후 쓰레기 메모리 값을 소멸해주지 않으면 다..
* c++ 에선 특이하게 생성자 종류가 2가지가 있다. 앞 포스팅에서는 일반생성자에 대해서 다뤘다. 이번에는 복사생성자에 대해서 다뤄보겠다. * class 구조 1. 생성자함수 2. 복사생성자함수 3. 소멸자 함수 4. 대입연산자 함수 * 복사 생성자 매개 변수가 있는 생성자 중에서 다른 개체를 인자로 전달받아 복사된 개체를 생성하는 생성자이다. 개발자가 복사 생성자를 정의하지 않으면 컴파일러는 디폴트 복사 생성자를 만들어준다. 디폴트 복사 생성자에서는 입력 인자로 전달된 개체의 메모리를 덤핑하여 생성하는 개체의 메모리에 복사하는 작업을 수행한다. 즉, 새로 생성되는 개체는 입력 개체와 같은 값들을 갖는 개체가 생성 되는 것이다. * 복사 생성자 특징 1. 객체 선언 해주면서 객체의 모든 멤버(필드)의 ..