Kong Eunho

객체 포인터와 객체 배열, 객체의 동적 생성

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


객체지향프로그래밍II(김정준) 중간고사 대비 (4장)

객체 포인터

Circle donut;
double area = donut.getArea();

Circle *p;
p = &donut; // 객체에 대한 포인터 선언
area = p->getArea(); // 멤버 함수 호출
area = (*p).getArea(); // 멤버 함수 호출
Circle circleArray[3]; // Circle 객체 배열 생성
Circle circleArray[3](5); // 오류 (매개변수 있는 생성자 호출 불가)

circleArray[0].setRadius(10); // 객체 배열의 원소 객체 멤버 접근

Circle *p = circleArray; // p == circleArray[0]
p++; // p == circleArray[1]

객체 배열

객체 배열 초기화

// 각 원소별로 생성자 지정 가능
Circle circleArray[3] = { Circle(10), Circle(20), Circle() }


동적 메모리 할당 및 반환

char *pChar = new char; // char 타입의 메모리 동적 할당
int *pInt = new int(20); // int 타입의 메모리 동적 할당, 20으로 초기화
Circle *pCircle = new Circle(); // Circle 클래스 타입의 메모리 동적 할당
Circle *pCircle = new Circle(20); // 매개변수가 있는 생성자 호출

delete pChar; // 할당 받은 문자 공간 반환
delete pInt; // 할당 받은 정수 공간 반환
delete pCircle; // 할당 받은 객체 공간 반환


배열의 동적 할당 및 반환

int *p = new int[n]; // n개의 정수 배열 동적 할당
int *pp = new int[n](20); // 오류. 배열은 동적 할당 시 초기화 불가능
Circle *pArray = new Circle[n]; // 각 원소 객체의 기본 생성자 Circle() 실행

p[0] = 5; // 동적 할당된 배열 원소에 접근

delete [] p; // 배열 메모리 반환
delete pp;// []를 생략해도 오류는 아니지만 비정상적인 반환
delete [] pArray; // 각 원소 객체의 소멸자 ~Circle() 실행


this 포인터

class Circle{
  int radius;
public:
  Circle() { this->radius = 1; } // 컴파일러에 의해 삽입
  Circle(int radius) { this->radius = radius; }
  Circle* testFunc() { return this; } // 객체가 자신의 주소를 반환
  ...
}

this의 제약 사항

this의 실체

// 컴파일러에 의해 묵시적으로 this 매개변수 삽입
Circle(Circle* this) { this->radius = 1; }
...
Circle donut;
donut.setRadius(&donut, 10); // 컴파일러에 의해 자신의 주소를 매개변수로 전달


string 클래스

◀ 이전 글 LECTURE, 인공지능개론
인공지능개론 중간고사
2025-10-19
목록으로 다음 글 ▶ LECTURE, 객체지향프로그래밍II
함수와 참조, 복사 생성자
2025-10-22