이번 시간에는 멤버함수와 클래스를 어떻게 활용할 것인지에 대해서 정리하는 시간을 가질 것이다.
정적 멤버 (static, non static)는 무엇인가?
- 변수와 함수에 대한 기억 부류의 한 종류
생명 주기: 프로그램이 시작될 때 생성, 프로그램 종료 시 소멸
사용 범위: 선언된 범위, 접근 지정에 따름
static 멤버
- 프로그램이 시작할 때 생성,
- 클래스 당 하나만 생성, 클래스 멤버라고 불림
- 클래스의 모든 인스턴스들이 공유하는 멤버
- 객체가 사라져도 여전히 존재
- 동일한 클래스의 모든 객체들에 의해 공유된다.
non-staitc 멤버
- 객체가 생성될 때 함께 생성
- 객체마다 객체 내에 생성
- 인스턴스 멤버라고 불림
- 객체와 생명을 같이함
- 공유되지 않는다, 객체 별로 따로 공간을 유지
static 멤버 변수
- 같은 클래스의 객체들 사이에 공유되는 멤버 변수
- 보통 멤버처럼 접근할 수 있음
- 클래스 이름과 범위 지정자(::)으로 접근 가능
static 멤버 함수
- 객체 없이 호출할 수 있는 멤버 함수
- 일반 멤버 함수처럼, 객체 이름, 포인터로 접근 가능
- 클래스 이름과 범위 지정자(::)으로 접근 가능
- this 포인터가 없음, 멤버 함수는 객체의 소유가 아니기 때문에
static 멤버 특징
- 객체가 만들어지지 않아도 사용 가능
- 정적 멤버 함수는 일반 멤버에 접근할 수 없다.
const 객체
- 멤버 변수의 값을 변경할 수 없음
- const 객체에는 대입할 수 없다.
- const 멤버 함수만 호출 가능하다 --> const 멤버 함수를 지정할 필요가 있다.
- 사용 시에는, 객체를 함수의 입력 인자로 전달할 때 주로 사용한다.
const 객체의 사용
- 객체를 함수의 입력 인자로 전달할 때 주로 사용
- 멤버 변수의 값 변경 불가능, 다른 일반 멤버 함수 호출 불가능
* const 멤버함수는 const 객체만 호출할 수 있다.
여러가지 객체 생성 방법
1. 객체 배열 및 포인터의 생성 및 사용
- 객체 배열 정의시 따로 지정하지 않으면 항상 디폴트 생성자로 초기화
- 초기화 하는 방법 확인하기 ( 객체 = { 생성자, 생성자 ...} )
- 디폴트 생성자가 없으면 오류가 난다. 디폴트 생성자가 없으면 가지고 있는 생성자의 형태에 맞게 객체를 선언해야 한다.
- 2차원 객체 배열도 선언할 수 있다.
객체 포인터
- 객체에 대한 포인터
- 포인터로 멤버를 접근할 때 (객체 포인터->멤버)
2. 동적 객체의 생성 및 사용
* 동적으로 객체를 만들었다? 무슨 말인가?
프로그램에서 실행 시간 동안 메모리 공간을 할당하는 것이다. 동적할당이 아니면 정적할당인데, 이와 같은 경우는 프로그램이 실행하기 전에 미리 메모리를 할당하고 프로그램을 실행한다.
- 객체 소멸은 생성한 순서에 관계 없이 원하는 순서대로 delete 할 수 있음
3. 동적 객체 배열의 생성 및 사용
4. 객체에 대한 포인터 배열의 생성 및 사용
'3 - 2학기 > 객체 지향 프로그래밍' 카테고리의 다른 글
객체 지향 프로그래밍 : 가상함수와 추상 클래스 (0) | 2021.06.13 |
---|---|
객체 지향 프로그래밍 : 상속 (0) | 2021.06.13 |
객체지향 프로그래밍 : 생성자와 소멸자 (0) | 2021.06.13 |
객체 지향 프로그래밍: 클래스 기초 (0) | 2021.06.11 |