4์ฅ ์์
Circle coin;
Circle *p; // Circle ํด๋์ค์ ๊ฐ์ฒดํฌ์ธํฐ p์ ์ธ
p = &coin; // ๊ฐ์ฒดํฌ์ธํฐ ์ด๊ธฐํ ๋ฐฉ๋ฒ
coin.getArea(); // ๊ฐ์ฒด๋ก ๋ฉค๋ฒํจ์ ํธ์ถ
p->getArea(); // ๊ฐ์ฒด ํฌ์ธํฐ๋ก ๋ฉค๋ฒํจ์ ํธ์ถ
(*p).getArea(); // ๊ฐ์ฒดํฌ์ธํฐ๋ก ๋ฉค๋ฒํจ์ ํธ์ถํ๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ
๊ฐ์ฒด ๋ฐฐ์ด
Circle arr[3]; // ๊ฐ์ฒด ๋ฐฐ์ด ์์ฑ
arr[0].getArea(); // ๊ฐ์ฒด ๋ฐฐ์ด ๋ฉค๋ฒํจ์ ํธ์ถ
arr[1].getArea();
arr[2].getArea();
Circle *ps;
ps = arr; // ๊ฐ์ฒด ๋ฐฐ์ด ํฌ์ธํฐ ์ด๊ธฐํ
for(int i = 0; i < 3; i++)
{
ps->getArea(); // ๋ฉค๋ฒ ํจ์ ํธ์ถ
ps++; // ๋ฐฐ์ด์ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋๋ก ํ๊ธฐ ์ํด
}
// ๊ฐ์ฒดํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฐฐ์ด์ ๋ค๋ฃจ๋ ๋ค์ํ ์ฌ๋ก // ๊ฐ์ฒด ๋ฐฐ์ด์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ๋์ ์ธ๋ฑ์ค์ ์์๋ถํฐ ์๋ฉธ๋๋ค. for(int i = 0; i < 3; i++) { ps->getArea(); ps[i].getArea(); (ps + i)->getArea(); ps++; }
/* ์์ฑ์๋ฅผ ์ด์ฉํ ๊ฐ์ฒด ๋ฐฐ์ด ์ด๊ธฐํ ๋ฐฉ๋ฒ, Circle() = ๊ธฐ๋ณธ ์์ฑ์ ๋ง์ฝ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๋ง๋ค์ง ์๊ณ ์์ฑ์๋ฅผ ๋ง๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๋ง๋ค์ง ์์ผ๋ฏ๋ก ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. */ Circle arr[3] = {Circle(),Circle(30), Circle(8)};
//๋ค์ฐจ์ ๊ฐ์ฒด ๋ฐฐ์ด, ์ผ๋ฐ์ ์ธ ๋ฐฐ์ด ์ฌ์ฉ๋ฒ์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค. Circle circles[3][8];
ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๋์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
C์ธ์ด : malloc() / free()
C++ : new, delete
new : ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ(heap)์ผ๋ก๋ถํฐ ํ ๋น๋ฐ๋๋ค.
delete : ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ(heap)์ผ๋ก ๋ฐํํ๋ค.
new ๊ธฐ๋ณธ ํ์
๋ฐ์ดํฐํ์ *ํฌ์ธํฐ๋ณ์ = new ๋ฐ์ดํฐํ์ ;
int *pInt = new int; char *pChar = new char; Circle *pCircle = new Circle();
delete ๊ธฐ๋ณธ ํ์
delete ํฌ์ธํฐ ๋ณ์;
delete pInt; delete pChar; delete pCircle;
์ด๊ธฐํ
๋ฐ์ดํฐํ์ *๋ฐ์ดํฐ๋ณ์ = new ๋ฐ์ดํฐํ์ (์ด๊น๊ฐ);
int *pInt = new int(20); char *pChar = new char('a');
๋ฐฐ์ด์ ๋์ ํ ๋น/๋ฐํ ๊ธฐ๋ณธ ํ์
ํ ๋น : ๋ฐ์ดํฐํ์ *ํฌ์ธํฐ๋ณ์ = new ๋ฐ์ดํฐํ์ [๋ฐฐ์ด์ ํฌ๊ธฐ];
int *pInt = new int[5];
delete ๊ธฐ๋ณธ ํ์
๋ฐํ: delete [] ํฌ์ธํฐ๋ณ์;
delete [] pInt;
์ด๊ธฐํ
int *pInt = new int [] {1,2,3,4,5};
๊ฐ์ฒด์ ๋์ ํ ๋น / ๋ฐํ ๊ธฐ๋ณธ ํ์
ํ ๋น
ํด๋์ค์ด๋ฆ ํฌ์ธํฐ๋ณ์ = new ํด๋์ค์ด๋ฆ;
ํด๋์ค์ด๋ฆ ํฌ์ธํฐ๋ณ์ = new ํด๋์ค์ด๋ฆ(์์ฑ์๋งค๊ฐ๋ณ์);Circle *p = new Circle; Circle *p = new Circle(30);
Tip : ๊ธฐ๋ณธ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด์์ฑ์ ๋ค์ ()๋ฅผ ๋ถ์ด์ง ์๋๋ค.
ํจ์๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.Circle pizza; // O Circle pizza(); // X
ํ์ง๋ง ํฌ์ธํฐ๋ ์๊ด ์๋ค.
Circle *p = new Circle; // O Circle *q = new Circle(); // O
๋ฐฐ์ด์ ๋์ ํ ๋น / ๋ฐํ ๊ธฐ๋ณธ ํ์
ํ ๋น : ํด๋์ค์ด๋ฆ *ํฌ์ธํฐ๋ณ์ = new ํด๋์ค์ด๋ฆ[๋ฐฐ์ด ํฌ๊ธฐ];
Circle *pArray = new Circle[3];
์ด๊ธฐํ
Circle *pArray = new Circle[3]{Circle(1),Circle(2), Circle(3)};
delete ๊ธฐ๋ณธ ํ์
๋ฐํ: delete [] ํฌ์ธํฐ๋ณ์;
delete [] pArray;
๊ฐ์ฒด ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
class Circle{ int radius; ๋ฉค๋ฒ๋ณ์; public: Circle() { this->radius = 1;} Circle(int radius) { this->radius = radius;} // Circle(ํ๋ผ๋ฏธํฐ ๋งค๊ฐ๋ณ์) { this->๋ฉค๋ฒ๋ณ์ = ํ๋ผ๋ฏธํฐ ๋งค๊ฐ๋ณ์;} // ์ค์ ์ปดํ์ผ๋ฌ๊ฐ this์ฒ๋ฆฌ ๋ฐฉ๋ฒ, ์๋ฌต์ ์ผ๋ก ์ฒ๋ฆฌํด์ค๋ค. /* Circle(int radius) { this->radius = radius;} => Circle(Circle *this, int radius) { this->radius = radius;} */
์์ฑ์์ ๊ฒฝ์ฐ this-> ๋ฅผ ์๋ตํด๋ ๋๋ค.
ํ์ง๋ง, ๋งค๊ฐ๋ณ์์ ๋ฉค๋ฒ๋ณ์๊ฐ ์ด๋ฆ์ด ๊ฐ๋ค๋ฉด ์์ ๊ฐ์ด ๊ผญ ํด์ค์ผํ๋ค.Circle(int radius) { radius = 1;}
this๋ ๊ฐ์ฒด์ ๋ฉค๋ฒ ํจ์์์ ๊ฐ์ฒด ์์ ์ ์ฃผ์๋ฅผ ๋ฆฌํด ํ ๋ ์ฌ์ฉํ๋ค.
class Sample{ public: Sample *foo(){ return this; } };
this๋ ํด๋์ค์ ๋ฉค๋ฒํจ์์์๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ฉค๋ฒ ํจ์๊ฐ ์๋ ํจ์๋ ๊ฐ์ฒด์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉค๋ฒํจ์๋ผ๋ ์ ์ ๋ฉค๋ฒํจ์๋ผ๋ฉด ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ ์ ๋ฉค๋ฒํจ์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ธฐ ์ ์๋ ํธ์ถ์ด ๊ฐ๋ฅํ๋ฏ๋ก, ๊ฐ์ฒด๊ฐ ์์ ๊ฒฝ์ฐ์๋ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
string ๊ฐ์ฒด ์์ฑ
string str; // ๋น ๋ฌธ์์ด ์คํธ๋ง ๊ฐ์ฒด string address("์์ธ์ ๊ด์ ๊ตฌ ์์ธ๋ํ๊ต"); // ๊ฐ์ฒด ์์ฑ ๋ฐ ์ด๊ธฐํ char text[] = {'H','e', 'l', 'l', 'o', ' ', '\0'}; string *p = new string("C++"); // ๋์ ์์ฑ
string copyAddress(address); // address ๊ฐ์ฒด๋ฅผ ๋ณต์ฌ string title(text); // C์คํ์ผ ๋ฌธ์์ด์ string ๊ฐ์ฒด๋ก ๋ณต์ฌ title.append("World!"); cout << copyAddress << endl; // ์์ธ์ ๊ด์ ๊ตฌ ์์ธ๋ํ๊ต cout << title << endl; // Hello, World! cout << *p; // C++ p->append(", nice"); cout << *p; // C++, nice delete p; // ๋ฐํ
๋ช ํ C++ํ๋ก๊ทธ๋๋ฐ ์ฑ
https://book.naver.com/bookdb/book_detail.naver?bid=13395206
โ ๏ธ ์ฃผ์ โ ๏ธ
1. ์ฌ๊ธฐ์๋ถํฐ๋ ์ค์ต๋ฌธ์ ์ ๋ต์ ๋๋ค.
2.์ ๊ฐ ์์ฑํ ์ ๋ต์ด ํ๋ฆด ์ ์์ต๋๋ค. ํน์ ํ๋ฆฐ๊ฒ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ ์์ ํ๊ฒ ์ต๋๋ค.
3. C++๋ฅผ ๊ณต๋ถํ์๋ ํ์์ด์๋ผ๋ฉด ๋ณด์๊ธฐ ์ ์ ์ง์ ๊ผญ ํ ๋ฒ ํ์ด๋ณด์ธ์!
์ค์ต ๋ฌธ์ 4 - 1
๋ฌธ์ : ์๋ ์ฝ๋ ๋น์นธ ์ฑ์ฐ๊ธฐ
#include <iostream>
using namespace std;
class Color{
int red, green, blue;
public:
Color(){ red = green = blue = 0;}
Color(int r, int g, int b){ red = r; green = g; blue = b;}
void setColor(int r, int g, int b) { red = r; green = g; blue = b;}
void show() {cout << red << ' ' << green << ' ' << blue << endl; }
};
int main()
{
Color screenColor(255, 0, 0);
Color *p;
p = &screenColor; // (1) p๊ฐ screenColor์ ์ฃผ์๋ฅผ ๊ฐ์ง๋๋ก ์ฝ๋ ์์ฑ
p->show(); // (2) p์ show()๋ฅผ ์ด์ฉํ์ฌ screenColor ์ ์ถ๋ ฅ
Color colors[3]; // (3) Color์ ์ผ์ฐจ์ ๋ฐฐ์ด colors์ ์ธ. ์์๋ 3๊ฐ
p = colors; // (4) p๊ฐ colors๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋๋ก ์ฝ๋ ์์ฑ
// (5) p์ setColor()๋ฅผ ์ด์ฉํ์ฌ colors[0], colors[1], colors[2]๊ฐ
// ๊ฐ๊ฐ ๋นจ๊ฐ, ์ด๋ก, ํ๋์์ ๊ฐ์ง๋๋ก ์ฝ๋ ์์ฑ
p[0].setColor(255, 0, 0);
p[1].setColor(0, 255, 0);
p[2].setColor(0, 0, 255);
// (6) p์ show()๋ฅผ ์ด์ฉํ์ฌ colors๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ถ๋ ฅ. for ๋ฌธ ์ด์ฉ
for(int i = 0; i < 3; i++)
{
p->show();
p++;
}
delete p;
}
์ค์ต ๋ฌธ์ 4 - 2
๋ฌธ์ : ๋ฐฐ์ด์ ๋์ ํ ๋น ๋ฐ ๋ฐํ์ ์ด์ฉํด ์ ์ 5๊ฐ์ ํ๊ท ๊ตฌํ๊ธฐ
#include <iostream>
using namespace std;
int main()
{
int *arr = new int[5];
int sum = 0;
cout << "์ ์ 5๊ฐ ์
๋ ฅ>> ";
for(int i = 0; i < 5; i++)
{
cin >> arr[i];
sum += arr[i];
}
cout << "ํ๊ท " << (double)sum / 5 << endl;
delete [] arr;
}
์ค์ต ๋ฌธ์ 4 - 3
๋ฌธ์ : string ํด๋์ค ๋ฉค๋ฒ ํจ์ find() ๋๋ for๋ฌธ์ ์ฌ์ฉํด a์ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ
#include <iostream>
using namespace std;
int main()
{
string str;
int cnt = 0;
cout << "๋ฌธ์์ด ์
๋ ฅ>> ";
getline(cin, str);
// ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ
for(int i = 0; i < str.length(); i++)
{
if(str[i] == 'a')
cnt++;
}
cout << "๋ฌธ์ a๋ " << cnt << "๊ฐ ์์ต๋๋ค." << endl;
// ๋๋ฒ์งธ ๋ฐฉ๋ฒ
cnt = 0;
int index = -1;
while(true)
{
index = str.find('a', index + 1);
if(index == -1)
{
cout << "๋ฌธ์ a๋ " << cnt << "๊ฐ ์์ต๋๋ค." << endl;
break;
}
cnt += 1;
}
}
์ค์ต ๋ฌธ์ 4 - 4
๋ฌธ์ :
Sampleํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
using namespace std;
class Sample{
int *p;
int size;
public:
Sample(int n){
size = n; p = new int[n];
}
void read();
void write();
int big();
~Sample();
};
void Sample::read() {
for(int i = 0; i < size; i++)
{
cin >> p[i];
}
}
void Sample::write() {
for(int i = 0; i < size; i++)
{
cout << p[i] << ' ';
}
cout << endl;
}
int Sample::big() {
int max = p[0];
for(int i = 1; i < size; i++)
{
if(max < p[i])
max = p[i];
}
return max;
}
Sample::~Sample() {
delete [] p;
}
int main()
{
Sample s(10);
s.read();
s.write();
cout << "๊ฐ์ฅ ํฐ ์๋ " << s.big() << endl;
}
์ค์ต ๋ฌธ์ 4 - 5
๋ฌธ์ : ์
๋ ฅํ ๋ฌธ์์ด ๋๋ค์์น๋ฅผ ๋๋ค์ํ๋ฒณ์ผ๋ก ๋ฐ๊พธ๊ธฐ
#include <iostream>
#include <string>
#include <random>
#include <locale>
using namespace std;
int main()
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> alpha(97,122);
string str;
cout << "์๋์ ํ ์ค์ ์
๋ ฅํ์ธ์.(exit๋ฅผ ์
๋ ฅํ๋ฉด ์ข
๋ฃํฉ๋๋ค)" << endl;
while(true)
{
cout << ">>";
getline(cin, str);
if(str == "exit")
break;
unsigned int len = str.length();
uniform_int_distribution<> pos(0, (int)len - 1);
while(true)
{
int n = pos(gen);
if(isalpha(str[n]))
{
str[n] = (char)alpha(gen);
break;
}
}
cout << str << endl;
}
}
์ค์ต ๋ฌธ์ 4 - 6
๋ฌธ์ : ์
๋ ฅ ๋ฐ์ ๋ฌธ์์ด ๊ฑฐ๊พธ๋ก ์ถ๋ ฅํ๊ธฐ
#include <iostream>
#include <string>
#include <random>
#include <locale>
using namespace std;
int main()
{
string str;
cout << "์๋์ ํ ์ค์ ์
๋ ฅํ์ธ์.(exit๋ฅผ ์
๋ ฅํ๋ฉด ์ข
๋ฃํฉ๋๋ค)" << endl;
while(true)
{
cout << ">>";
getline(cin, str);
if(str == "exit")
break;
unsigned int len = str.length();
for(int i = 0; i < len / 2; i++)
{
swap(str[i], str[len - 1 - i]);
}
cout << str << endl;
}
}
์ค์ต ๋ฌธ์ 4 - 7
๋ฌธ์ : Circleํด๋์ค์ main()ํจ์ ์์ฑํ๊ณ 3๊ฐ์ ๊ฐ์ฒด ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ฉด์ ์ด 100์ด์์ธ ๊ฐ์ฒด์ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ
#include <iostream>
using namespace std;
#define pi 3.14
class Circle{
int radius;
public:
void setRadius(int radius);
double getArea();
};
void Circle::setRadius(int radius) {
this->radius = radius;
}
double Circle::getArea() {
return radius * radius * pi;
}
int main()
{
Circle *pCircles = new Circle[3];
int cnt = 0;
int n = 0;
for(int i = 0; i < 3; i++)
{
cout << "์ "<< i + 1 << "์ ๋ฐ์ง๋ฆ " << ">> ";
cin >> n;
pCircles[i].setRadius(n);
if(pCircles[i].getArea() > 100)
cnt++;
}
cout << "๋ฉด์ ์ด 100๋ณด๋ค ํฐ ์์ " << cnt << "๊ฐ ์
๋๋ค";
delete [] pCircles;
}
์ค์ต ๋ฌธ์ 4 - 8
๋ฌธ์ : ์์์ ์ ๊ฐ์ง๋ 5๊ฐ์ ์ค์๋ฅผ ์
๋ ฅ ๋ฐ์ ์ ์ผ ํฐ ์๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ผ
#include <iostream>
using namespace std;
#define pi 3.14
class Circle{
int radius;
public:
void setRadius(int radius);
double getArea();
};
void Circle::setRadius(int radius) {
this->radius = radius;
}
double Circle::getArea() {
return radius * radius * pi;
}
int main()
{
int num = 0;
cout << "์์ ๊ฐ์ >> ";
cin >> num;
Circle *pCircles = new Circle[num];
int cnt = 0;
int n = 0;
for(int i = 0; i < num; i++)
{
cout << "์ "<< i + 1 << "์ ๋ฐ์ง๋ฆ " << ">> ";
cin >> n;
pCircles[i].setRadius(n);
if(pCircles[i].getArea() > 100)
cnt++;
}
cout << "๋ฉด์ ์ด 100๋ณด๋ค ํฐ ์์ " << cnt << "๊ฐ ์
๋๋ค";
delete [] pCircles;
}
์ค์ต ๋ฌธ์ 4 - 9
๋ฌธ์ : Personํด๋์ค ์์ฑํด์ ๋ค์๊ณผ ๊ฐ์ ์ถ๋ ฅ์ด ๋์ค๊ฒ mainํจ์ ์์ฑํ๊ธฐ
#include <iostream>
#include <string>
using namespace std;
class Person{
string name;
string tel;
public :
Person();
string getName() {return name;}
string getTel() {return tel;}
void set(string name, string tel);
};
Person::Person() {
}
void Person::set(string name, string tel) {
this->name = name;
this->tel = tel;
}
int main()
{
Person *persons = new Person[3];
cout << "์ด๋ฆ๊ณผ ์ ํ ๋ฒํธ๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์" << endl;
string name;
string tel;
for(int i = 0; i < 3; i++)
{
cout << "์ฌ๋ " << i + 1 << ">> ";
cin >> name >> tel;
persons[i].set(name, tel);
}
cout << "๋ชจ๋ ์ฌ๋์ ์ด๋ฆ์ ";
for(int i = 0; i < 3; i++)
{
if(i == 2)
{
cout << persons[i].getName() << endl;
}
else
{
cout << persons[i].getName() << " ";
}
}
cout << "์ ํ๋ฒํธ ๊ฒ์ํฉ๋๋ค. ์ด๋ฆ์ ์
๋ ฅํ์ธ์>>";
cin >> name;
for(int i = 0; i < 3; i++)
{
if(persons[i].getName() == name)
{
cout << "์ ํ ๋ฒํธ๋ " << persons[i].getTel() << endl;
break;
}
}
delete [] persons;
}
์ค์ต ๋ฌธ์ 4 - 10
๋ฌธ์ : ์ฃผ์ด์ง ์ฝ๋๋ฅผ ์ด์ฉํด Familyํด๋์ค์ Personํด๋์ค ์์ฑํด์ ๋ค์๊ณผ ๊ฐ์ ์ถ๋ ฅ ๋ง๋ค๊ธฐ
#include <iostream>
#include <string>
using namespace std;
class Person{
string name;
public:
Person(){}
Person(string name) {this->name = name;}
string getName() {return name;}
void setName(string name) {this->name = name;}
};
class Family{
Person *p;
int size;
string name;
public:
Family(string name,int size);
void show();
void setName(int n, string name) {
this->p[n].setName(name);
}
~Family();
};
Family::Family(string name, int size) {
p = new Person[size];
this->name = name;
this->size = size;
}
void Family::show() {
cout << name << "๊ฐ์กฑ์ ๋ค์๊ณผ ๊ฐ์ด " << size << "๋ช
์
๋๋ค." << endl;
for(int i = 0; i < size; i++)
{
cout << p[i].getName() << " ";
}
}
Family::~Family() {
delete [] p;
}
int main()
{
Family *shin = new Family("shin", 4);
shin->setName(0, "hyungman");
shin->setName(1, "misun");
shin->setName(2, "jjanggu");
shin->setName(3, "jjanga");
shin->show();
delete shin;
}
์ค์ต ๋ฌธ์ 4 - 11
๋ฌธ์ : ์ปคํผ์ํ๊ธฐ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
#include <iostream>
using namespace std;
class Container{ // ํต ํด๋์ค
int size; // ํ์ฌ ์ ์ฅ๋ ์ต๋ 10
public:
Container() {size = 10;}
void fill(); // ์ต๋๋ 10์ผ๋ก ์ฑ์ฐ๊ธฐ
void consume(); // 1๋งํผ ์๋น
int getSize(); // ํ์ฌ ํฌ๊ธฐ ๋ฆฌํด
};
void Container::fill() {
size = 10;
}
int Container::getSize() {
return size;
}
void Container::consume() {
size--;
}
class CoffeeVendingMachine{ // ์ปคํผ ์ํ๊ธฐ๋ฅผ ํํํ๋ ํด๋์ค
Container tong[3]; // 0 = ์ปคํผ 1 = ๋ฌผ 2 = ์คํ
void fill(); // 3ํต ๋ชจ๋ 10
void selectEspresso(); // ์ปคํผ -1 ๋ฌผ -1
void selectAmericano(); // ์ปคํผ -1 ๋ฌผ -2
void selectSugarCoffee(); // ์ปคํผ -1 ๋ฌผ -2 ์คํ -1
void show(); // ํํฉ ๋ณด์ฌ์ฃผ๊ธฐ
public:
void run();
};
void CoffeeVendingMachine::fill() {
for(int i = 0; i < 3; i++)
{
tong[i].fill();
}
show();
}
void CoffeeVendingMachine::selectEspresso() {
if(tong[0].getSize() >= 1 && tong[1].getSize() >= 1)
{
tong[0].consume();
tong[1].consume();
cout << "์์คํ๋ ์ ๋์ธ์" << endl;
}
else
{
cout << "์๋ฃ๊ฐ ๋ถ์กฑํฉ๋๋ค." << endl;
}
}
void CoffeeVendingMachine::selectAmericano() {
if(tong[0].getSize() >= 1 && tong[1].getSize() >= 2)
{
tong[0].consume();
tong[1].consume();
tong[1].consume();
cout << "์๋ฉ๋ฆฌ์นด๋
ธ ๋์ธ์" << endl;
}
else
{
cout << "์๋ฃ๊ฐ ๋ถ์กฑํฉ๋๋ค." << endl;
}
}
void CoffeeVendingMachine::selectSugarCoffee() {
if(tong[0].getSize() >= 1 && tong[1].getSize() >= 2 && tong[2].getSize()>=1)
{
tong[0].consume();
tong[1].consume();
tong[1].consume();
tong[2].consume();
cout << "์คํ์ปคํผ ๋์ธ์" << endl;
}
else
{
cout << "์๋ฃ๊ฐ ๋ถ์กฑํฉ๋๋ค." << endl;
}
}
void CoffeeVendingMachine::show() {
cout << "์ปคํผ " << tong[0].getSize() << ", ๋ฌผ " << tong[1].getSize() << ", ์คํ " << tong[2].getSize() << endl;
}
void CoffeeVendingMachine::run() {
int n = 0;
cout << "****** ์ปคํผ์ํ๊ธฐ๋ฅผ ์๋ํฉ๋๋ค. ******" << endl;
while(true)
{
cout << "๋ฉ๋ด๋ฅผ ๋๋ฌ์ฃผ์ธ์(1: ์์คํ๋ ์, 2:์๋ฉ๋ฆฌ์นด๋
ธ, 3:์คํ์ปคํผ, 4:์๋๋ณด๊ธฐ, 5:์ฑ์ฐ๊ธฐ)>> ";
cin >> n;
switch (n) {
case 1:
selectEspresso();
break;
case 2:
selectAmericano();
break;
case 3:
selectSugarCoffee();
break;
case 4:
show();
break;
case 5:
fill();
break;
}
}
}
int main()
{
CoffeeVendingMachine cvm;
cvm.run();
}
์ค์ต ๋ฌธ์ 4 - 12
๋ฌธ์ : ์ถ๋ ค๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก Circle, CircleManagerํด๋์ค ์์ฑํ๊ณ mainํจ์๋ ์์ฑํ๊ธฐ
#include <iostream>
#include <string>
using namespace std;
class Circle{
int radius;
string name;
public:
void setCircle(string name, int radius){
this->name = name;
this->radius = radius;
}
double getArea(){return radius * radius * 3.14;}
string getName(){return name;}
};
class CircleManager{
Circle *p;
int size;
public:
CircleManager(int size)
{
p = new Circle[size];
string name;
int radius;
for(int i = 0; i < size; i++)
{
cout << "์ " << i + 1 << "์ ์ด๋ฆ๊ณผ ๋ฐ์ง๋ฆ >> ";
cin >> name >> radius;
p[i].setCircle(name, radius);
}
} //size ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋์ ์์ฑ. ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ ์๋ฃ
~CircleManager(){delete [] p;}
void searchByName(){// ์ฌ์ฉ์๋ก๋ถํฐ ์์ ์ด๋ฆ์ ์
๋ ฅ๋ฐ์ ๋ฉด์ ์ถ๋ ฅ
string name;
cout << "๊ฒ์ํ๊ณ ์ ํ๋ ์์ ์ด๋ฆ >> ";
cin >> name;
for(int i = 0; i < size; i++)
{
if(name == p[i].getName())
{
cout << p[i].getName() << "์ ๋ฉด์ ์ " << p[i].getArea() << endl;
return;
}
}
}
void searchByArea(){// ์ฌ์ฉ์๋ก๋ถํฐ ๋ฉด์ ์ ์
๋ ฅ๋ฐ์ ๋ฉด์ ๋ณด๋ค ํฐ ์์ ์ด๋ฆ ์ถ๋ ฅ
int n;
cout << "์ต์ ๋ฉด์ ์ ์ ์๋ก ์
๋ ฅํ์ธ์ >> ";
cin >> n;
cout << n << "๋ณด๋ค ํฐ ์์ ๊ฒ์ํฉ๋๋ค." << endl;
for(int i = 0; i < size; i++)
{
if(p[i].getArea() > n)
{
cout << p[i].getName() << "์ ๋ฉด์ ์ " << p[i].getArea() << ", ";
}
}
}
};
int main()
{
int n;
cout << "์์ ๊ฐ์ >> ";
cin >> n;
CircleManager cm(n);
cm.searchByName();
cm.searchByArea();
}
์ค์ต ๋ฌธ์ 4 - 13
๋ฌธ์ : ์ถ๋ ฅ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก Histogramํด๋์ค์ mainํจ์ ์์ฑํ๊ธฐ
#include <iostream>
#include <string>
#include <locale>
using namespace std;
class Histogram{
string str;
public:
Histogram(string str){this->str = str;}
void put(string str){
this->str.append(str);
}
void putc(char c){
char *pChar = new char[2] {c, '\0'};
str.append(pChar);
delete [] pChar;
}
void print()
{
int alpha[26] = {0,};
cout << str << endl << endl;
int cnt = 0;
for(int i = 0; i <str.size(); i++)
{
if(isalpha(str[i]))
{
cnt++;
str[i] = tolower(str[i]);
alpha[int(str[i]) - 97]++;
}
}
cout << "์ด ์ํ๋ฒณ ์ " << cnt << endl << endl;
for(int i = 0; i < 26; i++)
{
cout << char(i + 97) << " (" << alpha[i] << ") : ";
for(int j = 0; j < alpha[i]; j++)
{
cout << "*";
}
cout << endl;
}
}
};
int main()
{
Histogram elvisHisto("Wise men say, only fools rush in But I can't help, ");
elvisHisto.put("falling in love with you");
elvisHisto.putc('-');
elvisHisto.put("Elvis Presley");
elvisHisto.print();
}
์ค์ต ๋ฌธ์ 4 - 14
๋ฌธ์ : ์ถ๋ ฅ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก Player, GamblingGameํด๋์ค์ mainํจ์ ์์ฑํ๊ธฐ
#include <iostream>
#include <string>
#include <random>
using namespace std;
class Player{
string name;
public:
void setName(){
cin >> name;
}
string getName()
{
return name;
}
};
class GamblingGame{
Player *p;
mt19937 gen;
public:
GamblingGame() : gen((random_device())()){
p = new Player[2];
cout << "์ฒซ๋ฒ์งธ ์ ์ ์ด๋ฆ>>";
p[0].setName();
cout << "๋๋ฒ์งธ ์ ์ ์ด๋ฆ>>";
p[1].setName();
cin.ignore();
}
~GamblingGame(){
delete [] p;
}
int randNum()
{
uniform_int_distribution<> dist(0, 2);
return dist(gen);
}
void run(){
int n = 0;
while(true)
{
cout << p[n%2].getName() << ":";
string c;
if(c == "\0")
{
cin.get();
int temp[3] = {randNum(),randNum(),randNum()};
if(temp[0] == temp[1] && temp[0] == temp[2])
{
cout << "\t\t\t" << temp[0] << "\t" << temp[1] << "\t" << temp[2] << "\t" << p[n%2].getName() << "๋ ์น๋ฆฌ!!";
break;
}
else
{
cout << "\t\t\t" << temp[0] << "\t" << temp[1] << "\t" << temp[2] << "\t" << "์์ฝ๊ตฐ์!" << endl;
}
}
n++;
}
}
};
int main()
{
GamblingGame gbg;
gbg.run();
}![](https://velog.velcdn.com/images/5p2rs5/post/0115e09c-50b1-4331-9f51-b64515bcf544/image.png)