* 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. 객체 선언 해주면서 객체의 모든 멤버(필드)의 ..
c++ 에서 class의 개념을 이해하기 위해서는 객체지향(OOP, Object Oriented Programming)이 무엇인지 알 필요가 있다. * 객체 지향 : 프로그래밍의 대상이 되는 세상의 사물과 현상 모두를 객체로 담아서 나타내는 것이다. 객체의 개념은 모든 개발자들이 해당 객체를 공통적으로 받아들일 수 있을만한 정의를 내린것이다. 특징으로는 추상화, 캡슐화, 상속, 다형성이 있다. - 추상화 : 독립적으로 표현 불가능한 추상적인 것을 구체화 시키는 행위 - 상속 : 부모의 형질을 물려받아 기능을 공유하여 코드의확장이 쉬움 - 다형성 : 한 객체가 다양한 형태를 지닐수 있으며 코드의 가독성이 좋아짐. - 캡슐화 : 논리적으로 비슷한 데이터와 기능을 묶어, 이들을 은닉하여 외부로 부터 보호가능하..
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 #include #include using namespace std; void input(int num, char *name, int *sco); void ex(int num, int *sco, float *avg); void output(..
* 다차원 포인터란? '*'이나 []의 갯수가 하나가 아닌 여러개를 가지는 변수(포인터) * 포인터 분석 순서 1. 먼저 포인터 변수를 찾아라 2. 포인터를 파악하면 포인터의 오른쪽부터 읽어라 3. 오른쪽을 읽으면 포인터의 왼쪽을 읽어라 * 포인터 코드 분석 1. 정체 파악 2. 나머지는 용도 3. 읽는 법은 이름을 기준으로 오른쪽부터 읽어야 함. 정체 파악하면 읽는거 멈춰야함. 2번 읽으면 안됨 ex1) int *p; 1. p옆은 ; 끝이므로 *로 간다. *p는 포인터 이므로 int로 간다. 2. 정체 : 포인터 3. 용도 int 타입 >> int *p는 int타입을 가진 포인터이다. ex2) int *p[3]; 1. p옆은 [3]첨자, 3개짜리 배열이다.int *로 간다. 2. 정체 : 배열 3. 용..
* 함수 중복 정의 (function overloading) 1. c++에서 오버로딩이란 같은 클래스 내에서 같은 이름의 함수를 사용하는 것을 의미한다. 즉, 사용자가 정의한 함수명을 매개 변수 리스트에 따라 단 하나의 유일한 이름의 함수명으로 결정하는 과정이다. 2. c언어에서는 같은 이름을 갖는 함수를 정의할 수가 없다. 하지만 c++에서는 특정 조건을 만족하는 경우 같은 이름을 갖는 함수를 중복해서 정의 할 수 있다. 3. 함수가 중복되도 c++ 컴파일 과정에서 단 하나의 유일한 이름의 함수로 변경되고 호출부 코드도 인자가 가장 적절한 함수로 연결된다. * 오버로딩 조건 1. 동일한 함수명을 써야함 2. 매개변수 타입이 달라야 한다. 3. 매개변수의 갯수가 달라야 한다. 4. 리턴하는 타입은 상관 ..