[C++ Programming] Class를 활용한 프로그래밍1 : SevenSeg / SevenSegs
SevenSeg 클래스 구현하기
문제설명
- 숫자를 나타내는 SevenSeg를 구현해보자
- int n, char seg[15]
- SevenSeg(int n) // 초기화
- « 연산자 오버로딩
SevenSeg란 숫자를 아래와 같이 7개의 획으로 나타낼 수 있는 표시이다
-
| |
-
| |
-
클래스 구현
/* Practice 1
*
* SevenSeg 클래스 구현
* int n, char seg[15]
* SevenSeg(int n) // 초기화
* cout << operator overloading
*/
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
class SevenSeg {
private:
int n;
char seg[15];
void Init();
void setNum();
public:
SevenSeg(int n);
friend ostream& operator<<(ostream& os, SevenSeg& sevenseg);
};
SevenSeg::SevenSeg(int num) :n(num) {
Init();
setNum();
}
void SevenSeg::Init() {
for (int i = 0; i < 15; i++) {
if (i % 2 == 0) {
seg[i] = ' ';
}
else {
if (i == 1 || i == 7 || i == 13) {
seg[i] = '-';
}
else {
seg[i] = '|';
}
}
}
}
void SevenSeg::setNum() {
switch (n) {
case 0:
seg[7] = ' ';
break;
case 1:
seg[1] = ' '; seg[3] = ' '; seg[7] = ' '; seg[9] = ' '; seg[13] = ' ';
break;
case 2:
seg[3] = ' '; seg[11] = ' ';
break;
case 3:
seg[3] = ' '; seg[9] = ' ';
break;
case 4:
seg[1] = ' '; seg[9] = ' '; seg[13] = ' ';
break;
case 5:
seg[5] = ' '; seg[9] = ' ';
break;
case 6:
seg[5] = ' ';
break;
case 7:
seg[7] = ' '; seg[9] = ' '; seg[13] = ' ';
break;
case 8:
break;
case 9:
seg[9] = ' ';
break;
}
}
ostream& operator<<(ostream& os, SevenSeg& sevenseg) {
for (int i = 1; i <= 15; i++) {
os << sevenseg.seg[i-1];
if (i % 3 == 0) {
os << endl;
}
}
return os;
}
int main(void) {
SevenSeg ss(3);
cout << ss;
return 0;
}
교수님 코드
class SevenSeg {
int n;
char seg[15];
void Set();
public:
SevenSeg(int n);
friend ostream& operator<<(ostream& os, SevenSeg& ss);
};
SevenSeg::SevenSeg(int n) {
this->n = n;
Set();
}
void SevenSeg::Set() {
seg[0] = ' ';
seg[2] = ' ';
seg[4] = ' ';
seg[6] = ' ';
seg[8] = ' ';
seg[10] = ' ';
seg[12] = ' ';
seg[14] = ' ';
if (n == 2 || n == 3 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9 || n == 0) seg[1] = '-';
else seg[1] = ' ';
if (n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9 || n == 0) seg[3] = '|';
else seg[3] = ' ';
if (n == 1 || n == 2 || n == 3 || n == 4 || n == 7 || n == 8 || n == 9 || n == 0) seg[5] = '|';
else seg[5] = ' ';
if (n == 2 || n == 3 || n == 4 || n == 5 || n == 6 || n == 9 || n == 8) seg[7] = '-';
else seg[7] = ' ';
if (n == 2 || n == 6 || n == 8 || n == 0) seg[9] = '|';
else seg[9] = ' ';
if (n == 1 || n == 3 || n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9 || n == 0) seg[11] = '|';
else seg[11] = ' ';
if (n == 2 || n == 3 || n == 5 || n == 6 || n == 8 || n == 9 || n == 0) seg[13] = '-';
else seg[13] = ' ';
}
ostream& operator<<(ostream& os, SevenSeg& ss) {
int k = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
os << ss.seg[k++];
}
os << endl;
}
return os;
}
int main(void) {
SevenSeg seg1(1);
SevenSeg seg2(2);
SevenSeg seg3(3);
SevenSeg seg4(4);
SevenSeg seg5(5);
SevenSeg seg6(6);
SevenSeg seg7(7);
SevenSeg seg8(8);
SevenSeg seg9(9);
SevenSeg seg0(0);
cout << seg1 << seg2 << seg3 << seg4 << seg5 << seg6 << seg7 << seg8 << seg9 << seg0;
return 0;
}
SevenSegs 클래스 구현하기
문제설명
- 위에서 구현한 SevenSeg의 클래스를 이용해 두자리 수 이상의 숫자를 표현해보자
- SevenSegs 클래스
- int n, vector
- SevenSeg(int n) // 초기화, n은 임의의 자연수
- « 연산자 오버로딩
- int n, vector
클래스 구현
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
class SevenSegs;
class SevenSeg {
private:
int n;
char seg[15];
void Init();
void setNum();
public:
SevenSeg(int n);
friend ostream& operator<<(ostream& os, SevenSeg& sevenseg);
friend ostream& operator<<(ostream& os, SevenSegs& sevenseg);
};
SevenSeg::SevenSeg(int num) :n(num) {
Init();
setNum();
}
void SevenSeg::Init() {
for (int i = 0; i < 15; i++) {
if (i % 2 == 0) {
seg[i] = ' ';
}
else {
if (i == 1 || i == 7 || i == 13) {
seg[i] = '-';
}
else {
seg[i] = '|';
}
}
}
}
void SevenSeg::setNum() {
switch (n) {
case 0:
seg[7] = ' ';
break;
case 1:
seg[1] = ' '; seg[3] = ' '; seg[7] = ' '; seg[9] = ' '; seg[13] = ' ';
break;
case 2:
seg[3] = ' '; seg[11] = ' ';
break;
case 3:
seg[3] = ' '; seg[9] = ' ';
break;
case 4:
seg[1] = ' '; seg[9] = ' '; seg[13] = ' ';
break;
case 5:
seg[5] = ' '; seg[9] = ' ';
break;
case 6:
seg[5] = ' ';
break;
case 7:
seg[7] = ' '; seg[9] = ' '; seg[13] = ' ';
break;
case 8:
break;
case 9:
seg[9] = ' ';
break;
}
}
ostream& operator<<(ostream& os, SevenSeg& sevenseg) {
for (int i = 1; i <= 15; i++) {
os << sevenseg.seg[i - 1];
if (i % 3 == 0) {
os << endl;
}
}
return os;
}
class SevenSegs {
private:
int n;
vector<SevenSeg> segs;
void Init();
public:
SevenSegs(int n);
friend ostream& operator<<(ostream& os, SevenSegs& sevenseg);
};
SevenSegs::SevenSegs(int n)
{
this->n = n;
Init();
}
void SevenSegs::Init() {
while (n > 0) {
int tmp = n % 10;
segs.push_back(SevenSeg(tmp));
n /= 10;
}
}
/*
-
| |
-
| |
-
*/
ostream& operator<<(ostream& os, SevenSegs& sevensegs) {
int l = 0;
for (int j = 0; j < 5; j++) {
for (int i = sevensegs.segs.size() - 1; i >= 0; i--) {
for (int k = 0; k < 3; k++) {
os << sevensegs.segs[i].seg[l + k];
}
}
l += 3;
os << endl;
}
return os;
}
int main(void) {
SevenSegs segs(1234567890);
cout << segs;
return 0;
}
교수님 코드
class SevenSegs;
class SevenSeg {
int n;
char seg[15];
void Set();
public:
SevenSeg(int n);
friend ostream& operator<<(ostream& os, SevenSeg& ss);
friend ostream& operator<<(ostream& os, SevenSegs,& ss);
};
SevenSeg::SevenSeg(int n) {
this->n = n;
Set();
}
void SevenSeg::Set() {
seg[0] = ' ';
seg[2] = ' ';
seg[4] = ' ';
seg[6] = ' ';
seg[8] = ' ';
seg[10] = ' ';
seg[12] = ' ';
seg[14] = ' ';
if (n == 2 || n == 3 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9 || n == 0) seg[1] = '-';
else seg[1] = ' ';
if (n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9 || n == 0) seg[3] = '|';
else seg[3] = ' ';
if (n == 1 || n == 2 || n == 3 || n == 4 || n == 7 || n == 8 || n == 9 || n == 0) seg[5] = '|';
else seg[5] = ' ';
if (n == 2 || n == 3 || n == 4 || n == 5 || n == 6 || n == 9 || n == 8) seg[7] = '-';
else seg[7] = ' ';
if (n == 2 || n == 6 || n == 8 || n == 0) seg[9] = '|';
else seg[9] = ' ';
if (n == 1 || n == 3 || n == 4 || n == 5 || n == 6 || n == 7 || n == 8 || n == 9 || n == 0) seg[11] = '|';
else seg[11] = ' ';
if (n == 2 || n == 3 || n == 5 || n == 6 || n == 8 || n == 9 || n == 0) seg[13] = '-';
else seg[13] = ' ';
}
ostream& operator<<(ostream& os, SevenSeg& ss) {
int k = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
os << ss.seg[k++];
}
os << endl;
}
return os;
}
class SevenSegs {
private:
int n;
vector<SevenSeg> segs;
void Set();
public:
SevenSegs(int n);
friend ostream& operator<<(ostream& os, SevenSegs& ss);
};
SevenSegs::SevenSegs(int n)
{
this->n = n;
Set();
}
void SevenSegs::Set()
{
int k = n;
for (int k = n; k > 0; k /= 10) {
SevenSeg temp(k % 10);
segs.push_back(temp);
}
}
ostream& operator<<(ostream& os, SevenSegs& ss)
{
int k = 0;
for (int i = 0; i < 5; i++) {
for (int j = ss.segs.size() - 1; j >= 0; j--) {
for (int l = 0; l < 3; l++) {
os << ss.segs[j].seg[k + l];
}
}
k += 3;
os << endl;
}
return os;
}
int main(void) {
SevenSegs sss(123);
cout << sss;
return 0;
}