클래스의 완성
- 정보은닉
- 캡슐화
- 생성자와 소멸자
- 클래스와 배열, this 포인터
정보은닉
정보 은닉
다른 클래스에서의 접근을 제한하는 것 (= 외부에서 멤버 변수에 접근하는 것을 방지)
= 멤버 변수를 private 선언 <-> 멤버 함수를 통한 안정적인 접근 경로를 설정
액세스 함수
정보 은닉으로 인하여 추가되는 함수
const 함수
멤버 함수의 const 선언 : const 함수 내에서는 동일 클래스에 선언된 멤버 변수의 값을 변경하지 못함
+ const 함수는 const가 아닌 함수를 호출하지 못함 -> 간접적인 멤버의 변경 가능성 차단
+ const 상수화 객체는 const 멤버 함수만 호출이 가능
캡슐화
하나의 클래스가 하나의 목적을 위하여 연관된 함수와 변수들이 모여 있는 것
ex) A클래스의 캡슐화가 잘되어 있다면 변경되더라도 연관된 B,C클래스는 변경되지 않거나 범위 최소화
생성자와 소멸자
생성자
객체의 생성과 동시에 함수를 호출 (new 함수 등)
조건: 클래스의 이름과 동일한 이름의 함수 + 반환형이 선언되어 있지 않으면서 값을 반환하지 않는 것
- 생성자가 정의되지 않으면 컴파일러에 의해 디폴트 생성자가 생성됨 -> 모든 객체는 생성자에 의해 생성
- 생성자 인자에 관한 정보가 없으면 void 생성자에 의한 호출이라는 의미(=디폴트 생성자)
- 생성자가 선언이 되었는데 어떠한 인자도 받지 않는 생성자가 필요하다면 직접 선언해주어야함
+ 생성자도 오버로딩 가능
- Circle 클래스를 기반으로 한 donut 객체 생성
- 인자가 없으므로 r=1인 donut 객체 생성
- double형 area 객체를 생성하여 Circle의
getArea() 함수를 호출
- r은 1이므로 면적은 3.14 출력
- pizza 객체는 10을 인자로 객체 생성
소멸자
객체의 소멸과 동시에 함수를 호출 (delete 함수 등)
형식: ~AA () { . . . }
-> 직접 명시하지 않아도 디폴트 생성자와 마찬가지로 디폴트 소멸자가 자동 생성
이니셜라이저
생성자 : 멤버변수의 초기화를 목적으로 정의
-> 객체 생성 과정에서의 생성자 호출은 객체의 초기화를 수월하게 만듬
-> 멤버 이니셜라이저는 멤버변수로 선언된 객체의 생성자 호출에 활용
+ 객체가 아닌 멤버변수도 이니셜라이저를 통해서 초기화 가능
-> 생성자의 몸체 혹은 이니셜라이저를 통한 초기화 중에서 선택 가능
- 생성자에 이니셜라이저를 정의
- Rectangle m_length=length;로 초기화
- 인자로 받은 값을 멤버변수로 초기화한다는 의미
- 객체z의 경우 width 값이 없어서 디폴트값 출력
클래스와 배열, this 포인터
this
객체 자신을 가리키는 키워드
A obj1;
-> obj1객체 내부에서 this는 obj1의 주소값과 A 타입정보를 의미
+ 객체의 주소값으로 접근 할 수 있는 대상은 멤버변수만 가능
- class A의 객체 a의 주소값과 a객체에서의
this는 동일
- class A와 객체 a, this의 주소값이 모두 동일
- this->num은 매개변수가 아닌 멤버변수 num을
가리키는 것
- this는 멤버변수를 초기화 할 때 많이 사용
- p는 num1의 주소값을, *p는 111을 의미
- ref1은 *p 즉, 111을 참조 -> ref1=num1=111
- p의 주소값을 ref2가 int형 포인터로 참조
객체 배열
person arr[3];
person* parr = new person(3);
-> person이라는 크래스에 arr이라는 배열을 선언
-> 배열 생성 시 객체가 함께 생성, 호출되는 생성자는 void 생성자
객체 포인터 배열
person *arr[3];
arr[0] = new person(name, age);
. . . arr[3] = new person(name, age);
-> person이라는 클래스에 객체를 저장할 수 있는 포인터(주소값) 변수로 이루어진 배열을 선언
-> 실제 객체는 배열 선언 시 생성되는 것이 아닌 별도의 생성 과정을 거쳐야 생성
'Study > Passionate C++ Programming' 카테고리의 다른 글
[열혈 C++ 프로그래밍] (6) friend, static, const (1) | 2024.01.21 |
---|---|
[열혈 C++ 프로그래밍] (5) 복사 생성자 (1) | 2024.01.21 |
[열혈 C++ 프로그래밍] (3) 클래스의 기본 (0) | 2024.01.21 |
[열혈 C++ 프로그래밍] (2) C언어 기반 C++ 2 (1) | 2024.01.21 |
[열혈 C++ 프로그래밍] (1) C언어 기반 C++ 1 (0) | 2024.01.21 |