1. 구조체
- 여러 가지 자료형의 데이터 집합을 저장할 수 있는 새로운 자료형을 정의한 것
struct StructName{
Type1 item1;
Type2 item2;
}; // C++ 은 마지막에 세미콜론 ; 을 꼭 적어줘야함
// 2차원 좌표 구조체 선언문
struct C2dType {
double x, y;
};
// 원을 표현하는 구조체 선언문
struct CircleType {
C2dType center; // 사용자 정의 자료형
double radius;
};
- 구조체 데이터를 처리하는 함수
- C언어에서는 구조체와는 별개의 함수로 정의함
- C++에서는 구조체와 구조체를 사용해 처리하고자하는 함수들을 하나의 단위로 묶을 수 있음
:: 기존 C언어의 경우
// circleArea 함수를 정의함
double circleArea(CircleType C)
{
return c.radius * c.radius * PI;
}
int main(){
CircleType c1 = {{0, 0}, 10};
cout << " 원의 면적 : "
<< circleArea(c1) << endl;
}
2. 클래스
- 표현하고자 하는 대상(객체)의 데이터(속성)와 함께 그 대상이 할 수 있는 동장을 나타내는 함수(행위)들을 묶어서 선언한 것
✅ 원 클래스
<행위>
* init : 원의 초기회
* area : 원의 면적 계산
* chkOverlap: 다른 원과 중첩 여부 검사
* display : 원의 정보 디스플레이
-------------------------
<속성>
* center : 중심좌표
* radius : 반경
#include <iostream>
#include <cmath>
#define PI 3.141592653589793
struct C2dType {
double x;
double y;
};
class CircleClass { // class 클래스 명
C2dType center; // 중심좌표
double radius; // 반경
//public 이전에 선언된 것은 외부에서 사용할 수 없음
public: // public뒤에 선언된 멤버들은 외부에서 사용할 수 있다.
// 중심(cx, cy), 반경 r로 원을 초기화
void init(double cx, double cy, double r){
center.x = cx;
center.y = cy;
radius = r;
}
// 원의 면적 계산
double area() conet {
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 {
std::cout << "중심: (" << center.x << ", " << center.y << ")\n";
std::cout << "반경: " << radius << "\n";
}
}
int main(){
CircleClass c1, c2;
c1.init(0, 0, 10); // 중심(0, 0), 반경 10으로 초기화
c2.init(30, 10, 5); // 중심(30, 10), 반경 5으로 초기화
cout << "원1" << endl;
c1.display();
cout << " 원1의 면적 : " << c1.area() << endl;
cout << "원2" << endl;
c2.display();
cout << " 원2의 면적 : " << c1.area() << endl;
}
반응형
'D.evelop > C++' 카테고리의 다른 글
[C++] 함수의 정의와 호출 (0) | 2024.11.09 |
---|---|
[C++] 포인터 (값 대입 시 고려사항) (1) | 2024.10.13 |
[C++] 기초 문법 (1) | 2024.09.28 |
댓글