본문 바로가기

C++ 언어/연습문제

C++ 언어 연습문제18

[문제]

아래의 코드를 보고 생성자를 추가하여 수정하라.

조건1) 참조자를 사용할 것
조건2) 잘못된 범위에 대한 부분은 신경쓰지 말고 지울 것

<Point.h>

#ifndef __POINT_H__
#define __POINT_H__

class Point
{
private:
	int x;
	int y;

public:
	bool InitMembers(int xpos, int ypos);
	int GetX() const;
	int GetY() const;
	bool SetX(int xpos);
	bool SetY(int ypos);
};
#endif

<Point.cpp>

#include<iostream>
#include "Point.h"
using namespace std;

bool Point::InitMembers(int xpos, int ypos)
{
	if (xpos < 0 || ypos < 0) {
		cout << "벗어난 범위의 값 전달" << endl;
		return false;
	}
	x = xpos;
	y = ypos;
	return true;
}

int Point::GetX() const
{
	return x;
}

int Point::GetY() const
{
	return y;
}

bool Point::SetX(int xpos)
{
	if (xpos < 0 || xpos > 100) {
		cout << "벗어난 범위의 값 전달" << endl;
		return false;
	}
	x = xpos;
	return true;
}

bool Point::SetY(int ypos)
{
	if (ypos < 0 || ypos > 100) {
		cout << "벗어난 범위의 값 전달" << endl;
		return false;
	}
	y = ypos;
	return true;
}

<Rectangle.h>

#ifndef __RECTANGLE_H__
#define __RECTANGLE_H__
#include "Point.h"

class Rectangle
{
private:
	Point upLeft;
	Point lowRight;

public:
	bool InitMembers(const Point& ul, const Point& lr);
	void ShowRecInfo() const;
};
#endif

<Rectangle.cpp>

#include<iostream>
#include"Rectangle.h"
using namespace std;

bool Rectangle::InitMembers(const Point& ul, const Point& lr)
{
	if (ul.GetX() > lr.GetX() || ul.GetY() > lr.GetY()) {
		cout << "잘못된 위치정보 전달" << endl;
		return false;
	}
	upLeft = ul;
	lowRight = lr;
	return true;
}

void Rectangle::ShowRecInfo() const
{
	cout << "좌 상단: " << '[' << upLeft.GetX() << ", ";
	cout << upLeft.GetY() << ']' << endl;
	cout << "우 히단: " << '[' << lowRight.GetY() << ", ";
	cout << lowRight.GetY() << ']' << endl;
}

<main.cpp>

#include<iostream>
#include "Point.h"
#include "Rectangle.h"
using namespace std;


int main(void)
{
	Rectangle rec(1, 1, 5, 5);
	rec.ShowRecInfo();

	return 0;
}

 

[실행 결과]

좌 상단: [1, 1]
우 하단: [5, 5]

 

[코드]

<Point.h>

#ifndef __POINT_H__
#define __POINT_H__

class Point
{
private:
	int x;
	int y;

public:
	Point(const int& xpos, const int& ypos);
	int GetX() const;
	int GetY() const;
	bool SetX(int xpos);
	bool SetY(int ypos);
};
#endif

<Point.cpp>

#include<iostream>
#include "Point.h"
using namespace std;

Point::Point(const int& xpos, const int& ypos)
{
	x = xpos;
	y = ypos;
}

int Point::GetX() const
{
	return x;
}

int Point::GetY() const
{
	return y;
}

bool Point::SetX(int xpos)
{
	if (xpos < 0 || xpos > 100) {
		cout << "벗어난 범위의 값 전달" << endl;
		return false;
	}
	x = xpos;
	return true;
}

bool Point::SetY(int ypos)
{
	if (ypos < 0 || ypos > 100) {
		cout << "벗어난 범위의 값 전달" << endl;
		return false;
	}
	y = ypos;
	return true;
}

<Rectangle.h>

#ifndef __RECTANGLE_H__
#define __RECTANGLE_H__
#include "Point.h"

class Rectangle
{
private:
	Point upLeft;
	Point lowRight;

public:
	Rectangle(const int& x1, const int& y1, const int& x2, const int& y2);
	void ShowRecInfo() const;
};
#endif

<Rectangle.cpp>

#include<iostream>
#include"Rectangle.h"
using namespace std;

Rectangle::Rectangle(const int& x1, const int& y1, const int& x2, const int& y2)
			:upLeft(x1, y1), lowRight(x2, y2)
{

}

void Rectangle::ShowRecInfo() const
{
	cout << "좌 상단: " << '[' << upLeft.GetX() << ", ";
	cout << upLeft.GetY() << ']' << endl;
	cout << "우 히단: " << '[' << lowRight.GetY() << ", ";
	cout << lowRight.GetY() << ']' << endl;
}

 

<참고>

윤성우의 열혈 C++ 프로그래밍

'C++ 언어 > 연습문제' 카테고리의 다른 글

C++ 언어 연습문제20  (0) 2022.10.21
C++ 언어 연습문제19  (0) 2022.10.20
C++ 언어 연습문제17  (0) 2022.10.19
C++ 언어 연습문제16  (0) 2022.10.18
C++ 언어 연습문제15  (0) 2022.10.14