Kong Eunho

C++ 객체

2025년 09월 11일 11시
카테고리 - LECTURE, 객체지향프로그래밍II


객체지향프로그래밍II(김정준) 2주차 강의내용

객체에 대한 포인터
    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;
}
◀ 이전 글 LECTURE, 인공지능개론
인공지능 개요와 역사, 응용과 연구
2025-09-09
목록으로 다음 글 ▶ LECTURE, 웹서비스응용
PHP 프로그래밍 환경 구축
2025-09-11