C++ 객체
객체에 대한 포인터
C 언어의 포인터와 동일
객체의 주소 값을 가지는 변수
포인터로 멤버를 접근할 때
객체포인터->멤버
객체 배열 선언 가능
기본 타입 배열 선언과 형식 동일
객체 배열 선언
1. 객체 배열을 위한 공간 할당
2. 배열의 각 원소 객체마다 생성자 실행
매개변수 있는 생성자를 호출할 수 없음
배열 소멸
배열의 각 객체마다 소멸자 호출, 생성의 반대순으로 소멸.
객체 배열 초기화
Circle circleArray[3] = { Circle(10), Circle(20), Circle() };
정적 할당
변수 선언을 통해 필요한 메모리 할당
동적 할당
필요한 양이 예측되지 않는 경우, 실행 중에 힙 메모리에서 할당
C++의 동적 메모리 할당/반환
new / delete
데이터타입 *포인터변수 = new 데이터타입;
delete 포인터변수;
delete 사용 시 주의사항
적절치 못한 포인터로 delete하면 런타임 오류 발생
- 동적으로 할당 받지 않은 메모리 delete
- 동일한 메모리 두 번 delete
배열의 동적 할당
데이터타입 *포인터변수 = new 데이터타입 [배열의 크기];
delete [] 포인터변수;
동적 할당 메모리 초기화
데이터타입 *포인터변수 = new 데이터타입(초깃값);
배열은 동적 할당 시 초기화 불가능.
객체의 동적 생성 및 반환
클래스이름 *포인터변수 = new 클래스이름;
클래스이름 *포인터변수 = new 클래스이름(생성자매개변수리스트);
delete 포인터변수;
객체 배열의 동적 생성 및 반환
클래스이름 *포인터변수 = new 클래스이름 [배열 크기];
delete [] 포인터변수;
동적 메모리 할당과 메모리 누수
동적으로 메모리를 할당한 후 포인터가 다른 주소를 가르키게 되면,
할당한 메모리의 누수가 발생.
this 포인터
객체 자신을 가리키는 포인터.
클래스의 멤버 함수 내에서만 사용.
개발자가 아닌 컴파일러가 선언한 변수.
this가 필요한 경우
- 매개변수의 이름과 멤버 변수의 이름이 같은 경우.
- 멤버 함수가 객체 자신의 주소를 리턴할 때.
this의 제약 사항
멤버 함수가 아닌 함수에서 this 사용 불가.
- 객체와의 관련성이 없기 때문
static 멤버 함수에서 this 사용 불가.
- 객체를 생성하기 이전에 함수 호출이 있을 수 있기 때문
string 클래스를 이용한 문자열
C++ 문자열
- C-스트링
- C++ string 클래스의 객체
string 클래스
- C++ 표준 라이브러리, <string> 헤더 파일에 선언
- 가변 크기의 문자열
- 다양한 문자열 연산을 실행하는 연산자와 멤버 함수 포함
- 문자열, 스트링, 문자열 객체, string 등으로 혼용
string 클래스를 이용한 문자열 생성 및 출력
#include <iostream>
#include <string>
using namespace std;
int main() {
// 스트링 생성
string str; // 빈 문자열을 가진 스트링 객체 생성
string address("서울시 성북구 삼선동 389");
string copyAddress(address); // address의 문자열을 복사한 스트링 객체 생성
char text[] = {'L', 'o', 'v', 'e', ' ', 'C', '+', '+', '\0'}; // C-스트링
string title(text); // "Love C++" 문자열을 가진 스트링 객체 생성
// 스트링 출력
cout << str << endl; // 빈 스트링. 아무 값도 출력되지 않음
cout << address << endl;
cout << copyAddress << endl;
cout << title << endl;
}