#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; }
Circle(int r) { radius = r; }
void setRadius(int r) {
radius = r;
}
double getArea();
};
//원의 면적 return
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
Circle donutArray[3];
//배열을 이용한 객체접근
donutArray[0].setRadius(10);
donutArray[1].setRadius(20);
donutArray[2].setRadius(30);
for (int i = 0; i < 3; i++) {
cout << "Donut" << i << "의 면적은" << donutArray[i].getArea() << endl;
}
//객체 포인터로 배열에 접근
Circle* p;
p = donutArray;
for (int i = 0; i < 3; i++) {
cout << "Donut" << i << "의 면적은" << p ->getArea() << endl;
p++;
}
}
객체 배열 초기화
Circle donutArray[3] = [Circle(), Circle(10), Circle(20)];
donutArray[0] => 기본 생성자 호출 => Circle()호출
donutArray[1] => 매개 변수 전달 생성자 호출 => Circle(10)호출
donutArray[2] => 매개 변수 전달 생성자 호출출 => Circle(20)호출
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; }
Circle(int r) { radius = r; }
void setRadius(int r) {
radius = r;
}
double getArea();
};
//원의 면적 return
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
Circle donutArray[3] = { Circle(), Circle(10), Circle(20) };
for (int i = 0; i < 3; i++) {
cout << "Donut" << i << "의 면적은" << donutArray[i].getArea() << endl;
}
}
다차원 객체 배열
2차원 배열의 선언
2차원 배열의 초기화
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; }
Circle(int r) { radius = r; }
void setRadius(int r) {
radius = r;
}
double getArea();
};
//원의 면적 return
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
Circle donutArray[2][3];
donutArray[0][0].setRadius(1);
donutArray[0][1].setRadius(2);
donutArray[0][2].setRadius(3);
donutArray[1][0].setRadius(4);
donutArray[1][1].setRadius(5);
donutArray[1][2].setRadius(6);
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << "Donut[" << i << "," << j << "]의 면적은" << donutArray[i][j].getArea() << endl;
}
}
}
동적 메모리
정적 메모리와 동적 메모리의 차이
C언어의 동적 메모리 사용
C++의 동적 메모리 할당
형식
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; }
Circle(int r) { radius = r; }
void setRadius(int r) {
radius = r;
}
double getArea();
};
//원의 면적 return
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
int* p;
p = new int; //힙 영역에 4byte 할당
if (!p) { //할당 안되면
cout << "메모리를 할당할 수 없습니다.";
return 0;
}
*p = 5;
int n = *p;
cout << "*p = " << *p << endl;
cout << "n = " << n << endl;
delete p;
}
동적메모리 배열사용
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; }
Circle(int r) { radius = r; }
void setRadius(int r) {
radius = r;
}
double getArea();
};
//원의 면적 return
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
cout << "입력 갯수는?";
int n;
cin >> n;
if (n <= 0) return 0;
int* p = new int[n];
if (!p) { //할당 안 되면
cout << "메모리를 할당할 수 없습니다.";
return 0;
}
for (int i = 0; i < n; i++) {
cout << i + 1 << "번째 입력: ";
cin >> p[i]; //정수 입력
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += p[i];
}
cout << "총합 = " << sum << endl;
delete[] p; //메모리 반환
}
객체의 동적 할당
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle() { radius = 1; }
Circle(int r) { radius = r; }
~Circle();
void setRadius(int r) {
radius = r;
}
double getArea();
};
//원의 면적 return
double Circle::getArea() {
return 3.14 * radius * radius;
}
Circle::~Circle() {
cout << "소멸자 실행 radius = " << radius << endl;
}
int main() {
Circle* p, * q;
p = new Circle;
q = new Circle(30);
cout << p->getArea() << endl << q->getArea() << endl;
delete p;
delete q;
}
자기 참조 포인터
-컴파일 전
class Circle {
int radius;
public:
Circle(int radius)
{
this -> radius = radius
}
}
-컴파일 후
class Circle {
int radius;
public:
Circle(Circle* this, int radius) //매개변수에 Circle* this 생성
{
this -> radius = radius
}
}