반응형
▣ 구조체와 클래스
● 구조체(struct)란?
▷ 여러 가지 자료형의 데이터 집합을 저장할 수 있는 새로운 자료형을 정의한 것
▶ 구조체의 표현방식 예
struct C2dType {
double x, y;
}
▷ 구조체 활용 예제 - Circle.cpp
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.141593;
struct C2dType { //2차원 좌표 구조체
double x, y;
};
struct CircleType { //원 구조체
C2dType center; //중심좌표
double radius; //반경
};
double circleArea(CircleType c)
{
return c.radius * c.radius * PI;
}
bool chkOverlap(CircleType c1, CircleType c2)
{
double dx = c1.center.x - c2.center.x;
double dy = c1.center.y - c2.center.y;
double dCntr = sqrt(dx*dx + dy*dy);
return dCntr < c1.radius + c2.radius;
}
void dispCircle(CircleType c)
{
cout << " 중심: (" << c.center.x << "," << c.center.y << ")";
cout << " 반경: " << c.radius << endl;
}
int main()
{
CircleType c1 = {{0,0}, 10};
CircleType c2 = {{30, 10}, 5};
cout << "원1" << endl;
dispCircle(c1);
cout << " 원1의 면적 : " << circleArea(c1) << endl;
dispCircle(c2);
cout << " 원2의 면적 : " << circleArea(c2) << endl;
//두 원의 중첩 여부 출력
if (chkOverlap(c1, c2))
cout << "두 원은 중첩됩니다." << endl;
else
cout << "두 원은 중첩되지 않습니다." << endl;
return 0;
}
● 클래스(class)란?
▷ 표현 대상이 어떤 일을 할 수 있는가(행위)와 어떤 데이터를 저장하는가(속성)을 하나의 단위로 묶어 선언한 것을 말한다.
▶ 클래스의 예 (원 클래스)
행위 | init : 원의 초기화 |
area : 원의 면적 계산 | |
chkOverlap : 다른 원과 중첩 여부 검사 | |
display : 원의 정보 디스플레이 | |
속성 | center : 중심 좌표 |
radius : 반경 |
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.141593;
struct C2dType { //2차원 좌표 구조체
double x, y;
};
class CircleClass {
C2dType center; //중심좌표
double radius; //반경
public:
void init(double cx, double cy, double r)
{
center.x = cx;
center.y = cy;
radius = r;
}
double area() const
{
return radius * radius * PI;
}
bool chkOverlap(const CircleClass& c) const
{
double dx = center.x - c.center.x;
double dy = center.y - c.center.y;
double dCntr = sqrt(dx*dx + dy*dy);
return dCntr < radius + c.radius;
}
void display() const //원 객체 정보 디스플레이
{
cout << " 중심: (" << center.x << "," << center.y << ")";
cout << " 반경: " << radius << endl;
}
};
int main()
{
CircleClass c1, c2;
c1.init(0, 0, 10);
c2.init(30, 10, 5);
cout << "원1" << endl;
c1.display();
cout << " 원 1의 면적 : " << c1.area() << endl;
cout << "원2" << endl;
c2.display();
cout << " 원 2의 면적 : " << c2.area() << endl;
//두 원의 중첩 여부
if (c1.chkOverlap(c2))
cout << "두 원은 중첩됩니다." << endl;
else
cout << "두 원은 중첩 아닙니다." <<endl;
return 0;
}
● 구조체와 클래스 비교
728x90
반응형
'Programming > C++' 카테고리의 다른 글
C++ 언어 기초 (6) - 클래스와 객체 (0) | 2020.08.27 |
---|---|
C++ 언어 기초 (5) - 함수 (0) | 2020.08.26 |
C++ 언어 기초 (4) - 포인터, 동적 메모리 할당, 참조 (0) | 2020.08.26 |
C++ 언어 기초 (2) - 키워드,식별자,자료형,변수,연산자,형변환 (0) | 2020.08.26 |
C++ 언어 기초 (1) - 개념, 빌드(build), 명칭공간(namespace) (0) | 2020.08.26 |