출처 : 반크_백제역사 유전지구과 이스탐블 역사지구
참고풀이1] C언어형으로 구현
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip> //setw(), setfill()
using namespace std;
int main()
{
int N;//배열의 크기를 입력받는다.
int ps;//배열의 시작 위치를 입력받는다.
static int count=0;
int i;//인덱스 또는 반복변수
int mx, my;//Point의 x,y 위치
cout << "The number of Point objects: " << count << endl;
cout << "Enter the size of Point array: ";
cin >> N;
//입력한 N크기의 배열을 설정한다.
int P[N][2];
//배열 크기만큼 Point를 입력받는다.
for(int i=0;i<N;i++)
{
count++;
cout << "\nPoint " << count << " constructor.\n";
while(true)
{
cout << "Input x and y for Point: ";
cin >> mx >> my;
if((mx>=0 && mx<100) && (my>=0 && my<100))
{
P[i][0]=mx;
P[i][1]=my;
break;
}
else
{
cout << "Out of range. Input again\n";
}
}
}
//배열에 입력된 값을 출력한다.
for(i=0;i<N;i++)
{
cout << "x = " << setw(2) << setfill('0') << P[i][0];
cout << ", y = " << setw(2) << setfill('0') << P[i][1] << endl;
}
cout << "\nThe number of Point objects: " << count;
cout << endl << endl;
for(i=0;i<N;i++)
{
cout << "Point " << count << " destructor.\n";
count--;
}
return 0;
}
참고풀이1 결과]
참고풀이2] 하나의 파일에서 객체로 구현
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip> //setw(), setfill()
using namespace std;
class Point
{
private:
int x, y;//점의 x, y 위치 변수
int N;
static int count;
int P[][2];
public:
Point();
static int getCount();
void Input();
void View();
string toString(int x);
~Point();
};
int Point::count = 0;
int Point::getCount()
{
return count;
}
Point::Point()
{
x = 0;
y = 0;
cout << "The number of Point objects: " << getCount() << endl;
cout << "Enter the size of Point array: ";
cin >> N;
//입력한 크기를 갖는 Point 배열을 생성한다.
P[N][2];
for (int i = 0;i < N;i++)
{
P[i][0] = 0;
P[i][1] = 0;
}
}
void Point::Input()
{
//배열 크기만큼 Point를 입력받는다.
while (count < N)
{
count++;
cout << "\nPoint " << getCount() << " constructor.\n";
while (true)
{
cout << "Input x and y for Point: ";
cin >> x >> y;
if ((x >= 0 && x < 100) && (y >= 0 && y < 100))
{
P[count - 1][0] = x;
P[count - 1][1] = y;
break;
}
else
{
cout << "Out of range. Input again\n";
}
}
}
}
void Point::View()
{
//배열에 입력된 값을 출력한다.
cout << endl;
for (int i = 0;i < N;i++)
cout << toString(i) << endl;
cout << "\nThe number of Point objects: " << getCount() << endl;
}
string Point::toString(int x)
{
ostringstream output;
output << "x = " << setw(2) << setfill('0') << P[x][0]
<< ", y = " << setw(2) << setfill('0') << P[x][1];
return output.str();
}
Point::~Point()
{
while (count >= 1)
{
cout << "Point " << getCount() << " destructor.\n";
count--;
}
}
int main()
{
Point pt;
pt.Input();
pt.View();
cout << endl;
return 0;
}
참고풀이2 결과]
참고풀이 3] 헤더, 멤버 함수 정의, main 함수로 구분하여 구현하기
Point.h)
#include <sstream>
#include <string>
using namespace std;
#ifndef Point_H
#define Point_H
class Point
{
private:
int x, y;//점의 x, y 위치 변수
static int count;
public:
Point(int mx, int my);
static int getCount();
string toString() const;
~Point();
};
#endif
Point.cpp)
#include <iostream>
#include <iomanip> //setw(), setfill()
#include "Point.h"
using namespace std;
Point::Point(int mx, int my)
{
x = mx;
y = my;
count++;
}
int Point::count = 0;
int Point::getCount()
{
return count;
}
string Point::toString() const
{
ostringstream output;
output << "x = " << setw(2) << setfill('0') << x << ", y = " << setw(2) << setfill('0') << y;
return output.str();
}
Point::~Point()
{
cout << "Point " << getCount() << " destructor.\n";
count--;
}
Main.cpp)
#include <iostream>
#include "Point.h"
using namespace std;
int main()
{
int mN;
int mx, my;
int i;
cout << "The number of Point objects: " << Point::getCount() << endl;
cout << "Enter the size of Point array: ";
cin >> mN;
Point *pt[10];
for (int i = 0; i < mN; i++)
{
cout << "\nPoint " << Point::getCount()+1 << " constructor.\n";
while (true)
{
cout << "Input x and y for Point: ";
cin >> mx >> my;
if ((mx >= 0 && mx < 100) && (my >= 0 && my < 100))
break;
else
cout << "Out of range. Input again\n";
}
pt[i] = new Point(mx, my);
}
//배열에 입력된 값을 출력한다.
cout << endl;
for (i = 0;i < mN;i++)
cout << pt[i] -> toString() << endl;
cout << "\nThe number of Point objects: " << Point::getCount() << endl;
cout << endl;
for (i = 0;i < mN;i++)
delete pt[i];
return 0;
}
참고풀이3 결과]
대한민국의 아름다운 영토, 독도의 가을
'프로그램 > C++ 1000제' 카테고리의 다른 글
C++ 116제] 어서와! C++은 처음이지! CHAPTER 09. PROGRAMMNG EXEPCISE 3. p394 (0) | 2024.11.04 |
---|---|
C++ 115제] 인하대 과제4 (1) | 2024.10.06 |
C++ 113제] 인하대 과제 2 (0) | 2024.09.30 |
C++ 112제] 어서와! C++은 처음이지! CHAPTER 09. PROGRAMMING EXEPCISE 2. p393 (0) | 2024.08.11 |
C++ 111제] 두근두근 파이썬(개정판) CHAPTER 7 연습문제5 p233 (0) | 2024.02.11 |
댓글