본문 바로가기
Programming/C++

C++ 언어 기초 (3) - 구조체와 클래스

by 롱일스 2020. 8. 26.
반응형

▣ 구조체와 클래스

 ●  구조체(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
반응형