3์ฅ ์์
์ค์ํ์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒ
๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ํจ์๋ก ๊ตฌ์ฑ๋๋ค.
๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ํ๋ ํ, ๊ตฌ์ฑ๋
๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ํจ์๋ฅผ ์ ์ธํ๋ค.
<iostream> ์
์ถ๋ ฅ ๊ด๋ จ ํค๋ํ์ผ
ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ธ๋ถ์ ๊ณต๊ฐํ์ฌ ๋ค๋ฅธ ํด๋์ค๊ฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค.
ํด๋์ค ๋ด๋ถ๋ฅผ ์ธ๋ถ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ค. ๊ธฐ๋ณธ ์ ๊ทผ ์ง์ ์
ํด๋์ค ๋ด์ ๋ฉค๋ฒํจ์์ ํด๋์ค๋ฅผ ์์๋ฐ์ ํ์ํด๋์ค์ ๋ฉค๋ฒ ํจ์์๊ฒ๋ง ์ ๊ทผ์ด ํ์ฉ
#include <iostream>
using namespace std;
class Circle{ // ํด๋์ค ์ ์ธ
public: // ์ ๊ทผ์ง์ ์ public
int radius; // ๋ฉค๋ฒ๋ณ์
double getArea(); // ๋ฉค๋ฒํจ์
};
double Circle::getArea() { // ๋ฉค๋ฒํจ์ ๊ตฌํ, :: = ์ ๊ทผ์ง์ ์
return 3.14 * radius * radius;
}
int main()
{
Circle donut; // ๊ฐ์ฒด ์์ฑ
donut.radius = 1; // ๊ฐ์ฒด ๋ฉค๋ฒ ๋ณ์ ์ ๊ทผ
double area = donut.getArea(); // ๊ฐ์ฒด ๋ฉค๋ฒ ํจ์ ์ ๊ทผ
}
๊ฐ์ฒด ์์ฑ์ ์ด๊ธฐํํ๋ ํน๋ณํ ๋ฉค๋ฒ ํจ์
ํน์ง :
โโโ์์ฑ์ ํจ์๋ ํ๋ฒ๋ง ์ํ๋๋ค
โโโํจ์์ ์ด๋ฆ์ ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ๋ค
โโโ๋ฆฌํดํ์
์ ์ ์ธํ์ง ์๋๋ค
โโโ์ค๋ณต ๊ฐ๋ฅ
โ์์ฑ์๋ฅผ ์ ์ธํ์ง ์๋๋ผ๋ ์ปดํ์ผ๋ฌ๊ฐ ์์์ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์์ฑํ๋ค.
โ๋จ, ์์ฑ์๊ฐ ํ๋๋ผ๋ ์ ์ธ๋์ด ์๋ค๋ฉด ์์ฑ๋์ง ์๋๋ค.
<cstring> or <string.h> ํค๋ํ์ผ
strcmp, strcpy, strlen ๋ฑ C๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ์ฌ์ฉํ๊ธฐ ์ํ ํค๋ํ์ผ
<string> ํค๋ํ์ผ (string)
c++์์ ์๋ก ์ถ๊ฐ๋ ๋ฌธ์์ด ํ์
์ ์ฌ์ฉํ๊ธฐ ์ํ ํค๋ํ์ผ
๋น์ทํ ์์ฑ์ 2๊ฐ์ค ํ๋๋ฅผ ๋ค๋ฅธ ํ๋์ ์์ฑ์๋ก ์์์์ผ์ ์ด๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ
Circle::() : Circle(1){ } // Circle(int r)์ ์์ฑ์ ํธ์ถ
Circle::() : Circle(int r){
radius = r;
}
class Point{ // ์์ฑ์ ์ฝ๋์์ ๋ฉค๋ฒ ๋ณ์ ์ด๊ธฐํ
int x, y;
public:
Point();
Point(int a, int b);
};
Point::Point(){ x = 0; y = 0;};
Point::Point(int a, int b){ x = a; y = b;};
// ์์ฑ์ ์๋์ ์ด๊น๊ฐ์ผ๋ก ์ด๊ธฐํ
Point::Point() : x(0), y(0){};
Point::Point(int a, int b) : x(a), y(b){};
// ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ
Point::Point(int a) : x(a), y(0){};
Point::Point(int a) : x(a + 100), y(100){};
// ํด๋์ค ์ ์ธ๋ถ์์ ์ง์ ์ด๊ธฐํ
class Point{
int x = 0, y = 0;
}
โโโ๊ฐ์ฒด๊ฐ ์๋ฉธํ ๋ ์ํํ ์์
โโโ์๋ฉธ์๋ ๋ฆฌํดํ์
์ด ์๊ณ ์ด๋ค ๊ฐ๋ ๋ฆฌํดํด์๋ ์๋๋ค.
โโโ์ค์ง ํ๊ฐ๋ง ์กด์ฌ
โโโ๊ธฐ๋ณธ ์์ฑ์์ฒ๋ผ ๊ธฐ๋ณธ ์๋ฉธ์๋ ์๋์ผ๋ก ์์ฑ๋๋ค.
//์ ์ธ ๋ฐฉ๋ฒ์ ์์ฑ์ ํจ์ ์์ ~๋ถ์ด๊ธฐ
Circle::~Circle(){}
์ ์ญ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ ๋ก๋ฉ์ ๋ฐ๋ก ์์ฑ๋๊ณ ์ง์ญ๊ฐ์ฒด๋ ์ง์ญ๊ฐ์ฒด๋ ํจ์ ์คํ์ ์์ฑ๋๋ค.
์๋ฉธ์ ํจ์๊ฐ ๋๋ฌ์๋ ์ง์ญ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๊ณ ๋์ค์ ์ ์ญ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๋ค.
์ ์ญ ์์ฑ -> ์ง์ญ์์ฑ -> return -> ์ง์ญ์๋ฉธ -> ํ๋ก๊ทธ๋จ ์ข ๋ฃ -> ์ ์ญ์๋ฉธ
๋ฉค๋ฒ๋ณ์๋ private์ด ๋ฐ๋์งํ๋ค, ์์ฑ์๋ public์ผ๋ก
์ฝ๋์ ํจ์จ์ ์ฆ๊ฐ ์ํค๋ ๋ฐฉ๋ฒ์ด์ง๋ง, ์ต๊ทผ ์ปดํ์ผ๋ฌ๊ฐ ์์์ ์ธ๋ผ์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ฉด ํด์ฃผ๋ฏ๋ก ๋์ด๊ฐ๋ค.
C์ธ์ด์ ๋์ผํ์ง๋ง, ์ถ๊ฐ๋ก ์์ฑ์, ์๋ฉธ์์ ๊ฐ์ ๋ฉค๋ฒํจ์๋ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
ํค๋ ํ์ผ๊ณผ CPPํ์ผ ๋ถ๋ฆฌํ๋ค.
ํค๋ํ์ผ = ํด๋์ค์ ์ ์ธ
ํค๋ํ์ผ ๊ด๋ จ CPPํ์ผ = ํด๋๊ทธ ๊ตฌํ
main.cppํ์ผ = mainํจ์ ๋ฑ ๋๋จธ์ง ์ฝ๋
ํค๋ํ์ผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ #include "ํค๋ํ์ผ์ด๋ฆ.h"
ํด๊ฒฐ ๋ฐฉ๋ฒ : ํค๋ํ์ผ์ ์กฐ๊ฑด ์ปดํ์ผ๋ฌธ ์ถ๊ฐ
#ifndef (์กฐ๊ฑด ์ปดํ์ผ๋ฌธ์ ์์)
#define (์กฐ๊ฑด ์ปดํ์ผ๋ฌธ์ ์์)
class abc{
. . . .
}
#endif
๋ช ํ C++ํ๋ก๊ทธ๋๋ฐ ์ฑ
https://book.naver.com/bookdb/book_detail.naver?bid=13395206
โ ๏ธ ์ฃผ์ โ ๏ธ
1. ์ฌ๊ธฐ์๋ถํฐ๋ ์ค์ต๋ฌธ์ ์ ๋ต์ ๋๋ค.
2.์ ๊ฐ ์์ฑํ ์ ๋ต์ด ํ๋ฆด ์ ์์ต๋๋ค. ํน์ ํ๋ฆฐ๊ฒ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ ์์ ํ๊ฒ ์ต๋๋ค.
3. C++๋ฅผ ๊ณต๋ถํ์๋ ํ์์ด์๋ผ๋ฉด ๋ณด์๊ธฐ ์ ์ ์ง์ ๊ผญ ํ ๋ฒ ํ์ด๋ณด์ธ์!
์ค์ต ๋ฌธ์ 3 - 1
๋ฌธ์ : ์๋ ์ถ๋ ฅ์ด ๋์ค๋๋ก Towerํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
using namespace std;
int main()
{
Tower myTower;
Tower seoulTower(100);
cout << "๋์ด๋ " << myTower.getHeight() << "๋ฏธํฐ" << endl;
cout << "๋์ด๋ " << seoulTower.getHeight() << "๋ฏธํฐ" << endl;
}
#include <iostream>
using namespace std;
class Tower{
int height;
public:
Tower();
Tower(int height);
int getHeight();
};
Tower::Tower() : height(1) {}
Tower::Tower(int height) :height(height){}
int Tower::getHeight()
{
return height;
}
int main()
{
Tower myTower;
Tower seoulTower(100);
cout << "๋์ด๋ " << myTower.getHeight() << "๋ฏธํฐ" << endl;
cout << "๋์ด๋ " << seoulTower.getHeight() << "๋ฏธํฐ" << endl;
}
์ค์ต ๋ฌธ์ 3 - 2
๋ฌธ์ : ์๋ ์ถ๋ ฅ์ด ๋์ค๋๋ก Dateํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
using namespace std;
int main()
{
Date birth(2014, 3, 20);
Date independencyDay("1945/8/15");
independencyDay.show();
cout << birth.getYear() << ',' << birth.getMonth() << ',' << birth.getDay() << endl;
}
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class Date{
int year;
int month;
int day;
string date;
public :
Date(int a, int b, int c);
Date(string date);
int getYear();
int getMonth();
int getDay();
void show();
};
Date::Date(int a, int b, int c) {
year = a;
month = b;
day = c;
}
Date::Date(string date) {
char temp[100];
strcpy(temp, date.c_str());
year = stoi(strtok(temp, "/"));
month = stoi(strtok(nullptr, "/"));
day = stoi(strtok(nullptr, "/"));
}
int Date::getYear() {return year;}
int Date::getMonth() {return month;}
int Date::getDay() {return day;}
void Date::show() {cout << year << "๋
" << month << "์" << day << "์ผ" << endl;}
int main()
{
Date birth(2014, 3, 20);
Date independencyDay("1945/8/15");
independencyDay.show();
cout << birth.getYear() << ',' << birth.getMonth() << ',' << birth.getDay() << endl;
}
c_str : stringํ์ ๋ฌธ์์ด์ char ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ค๋ค.
strtok : ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์ ์๋ฅด๋ ํจ์, cstring ํค๋ํ์ผ
strtok(๋ฌธ์์ด์ด ๋ค์ด์๋ ๋ฐฐ์ด(ํฌ์ธํฐ), ๊ตฌ๋ถ์)
nullptr์ ๋ฃ์ ์ด์ ?
strtok๋ ๋ฌธ์์ด์์ ๊ตฌ๋ถ์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ํด๋น ๊ตฌ๋ถ์๋ฅผ null๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ ๊ตฌ๋ถ์ ์ ์ ๋ฌธ์์ด ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
nullptr์ ๋ง๋๊ฒ ๋๋ฉด ์ด์ ์ ๋ฌธ์์ด์์ null๊ฐ์ ๋ค์ ๋ฌธ์์ด๋ถํฐ ๊ตฌ๋ถ์๊น์ง ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ผ์ ํด๋น ๋ฌธ์์ด์์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
strtok๋ฅผ ์ฌ์ฉํ ํจ์์ ๋ฌธ์์ด์ ์์ ๊ฐ์ด ๊ตฌ๋ถ์๊ฐ null๋ก ๋ฐ๋๊ฒ์ ๋ณผ ์ ์๋ค.
์ค์ต ๋ฌธ์ 3 - 3
๋ฌธ์ : Accountํด๋์ค ๋ง๋ค๊ธฐ
๊ณ์ข์ฃผ์ธ, ๊ณ์ข๋ฒํธ, ์์ก์ ๋ํ๋ด๋ 3๊ฐ์ ๋ฉค๋ฒ๋ณ์๋ก ๊ตฌ์ฑ
#include <iostream>
using namespace std;
class Account{
string m_name;
int m_accountNum;
int m_money;
public :
Account(string name, int accountNum, int money)
{
m_name = name;
m_accountNum = accountNum;
m_money = money;
}
void deposit(int a)
{
m_money += a;
}
int withdraw(int a)
{
m_money -= a;
return m_money;
}
string getOwner()
{
return m_name;
}
int inquiry()
{
return m_money;
}
};
int main()
{
Account a("kitae", 1, 5000);
a.deposit(50000);
cout << a.getOwner() << "์ ์์ก์ " << a.inquiry() << endl;
int money = a.withdraw(20000);
cout << a.getOwner() << "์ ์์ก์ " << a.inquiry() << endl;
}
์ค์ต ๋ฌธ์ 3 - 4
๋ฌธ์ :
์ปคํผ ๋จธ์ ํด๋์ค ๋ง๋ค๊ธฐ
์์คํ๋ ์ ํ์ = ์ปคํผ, ๋ฌผ ๊ฐ๊ฐ 1์ฉ ์๋น
์๋ฉ๋ฆฌ์นด๋ ธ ํ์ = ์ปคํผ 1, ๋ฌผ 2 ์๋น
์คํ์ปคํผ ํ์ = ์ปคํผ 1, ๋ฌผ 2, ์คํ 1 ์๋น
#include <iostream>
using namespace std;
int main()
{
CoffeeMachine java(5, 10, 3);
java.drinkEspresso();
java.show();
java.drinkAmericano();
java.show();
java.drinkSugarCoffee();
java.show();
java.fill();
java.show();
}
#include <iostream>
using namespace std;
class CoffeeMachine{
int m_coffee;
int m_water;
int m_sugar;
public :
CoffeeMachine(int coffee, int water, int sugar) : m_coffee(coffee), m_sugar(sugar), m_water(water){}
void drinkEspresso(){m_coffee -= 1;m_water -= 1;}
void drinkAmericano(){m_coffee -= 1;m_water -= 2;}
void drinkSugarCoffee(){m_coffee -= 1;m_water -= 2;m_sugar -= 1;}
void show(){cout << "์ปคํผ ๋จธ์ ์ํ, ์ปคํผ:" << m_coffee << " ๋ฌผ:" << m_water << " ์คํ:" << m_sugar << endl;}
void fill(){m_coffee = 10;m_water = 10;m_sugar = 10;}
};
int main()
{
CoffeeMachine java(5, 10, 3);
java.drinkEspresso();
java.show();
java.drinkAmericano();
java.show();
java.drinkSugarCoffee();
java.show();
java.fill();
java.show();
}
์ค์ต ๋ฌธ์ 3 - 5
๋ฌธ์ : ๋์ ๋ฐ์์ํค๋ Randomํด๋์ค ๋ง๋ค๊ธฐ
0 ~ 32767๊น์ง์ ๋๋คํ ์ ์ 10๊ฐ ์ถ๋ ฅํ๊ธฐ
2 ~ 4๊น์ง์ ๋๋คํ ์ ์ 10๊ฐ ์ถ๋ ฅํ๊ธฐ
// ์ถ์ฒ : https://docs.microsoft.com/ko-kr/cpp/standard-library/random?view=msvc-170
#include <random>
#include <iostream>
using namespace std;
int main()
{
random_device rd; // ์๋ ์์ฑ๊ธฐ
mt19937 gen(rd()); // ์๋ ์์ฑ๊ธฐ ์ด๊ธฐํ
uniform_int_distribution<> dist(1,6); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
for (int i = 0; i < 5; ++i) {
cout << dist(gen) << " "; // ๋์ ์์ฑ ๋ฐ ์ถ๋ ฅ
}
cout << endl;
}
#include <iostream>
#include <cstdlib> // rand()
#include <ctime> // time()
using namespace std;
int main()
{
srand(time(nullptr)); // time์ ์ด์ฉํ ์๋๋ณ๊ฒฝ, ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ ์ถ๋ ฅํ๊ฒ ํด์ค๋ค.
int random = 0; // ์ ์ํ ๋ณ์ ์ ์ธ
for (int i = 0; i < 10; i++) {
random = rand()%9; // rand() ๋์ ๋ฐ์, %9 = 0 ~ 9๊น์ง์ ์ ์๋ฒ์๋ฅผ ์ํด
cout << random << endl;
}
}
#include <iostream>
#include <cstdlib>
#include <random>
using namespace std;
class Random{
private:
mt19937 gen;
public:
Random() : gen((std::random_device())()){ }
int next()
{
uniform_int_distribution<> dist(0,RAND_MAX); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
return dist(gen);
}
int nextInRange(int a, int b)
{
uniform_int_distribution<> dist(a, b); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
return dist(gen);
}
};
int main()
{
Random r;
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.next() % 32768; // ๋ด ์ปดํ์ผ๋ฌ์์๋ RAND_MAX๊ฐ์ด 2147483647์ด๋ผ์ %์ฐ์ฐ์ ํตํด ๋ฒ์ ์ง์
cout << n << ' ';
}
cout << endl << endl << "-- 2์์ " << "4 ๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.nextInRange(2, 4);
cout << n << ' ';
}
cout << endl;
}
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class Random{
public:
Random();
int next();
int nextInRange(int a, int b);
};
Random::Random() {
srand((unsigned int)time(NULL));
}
int Random::next() {
return rand();
}
int Random::nextInRange(int a, int b) {
return rand() % 3 + 2;
}
int main()
{
Random r;
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.next();
cout << n << ' ';
}
cout << endl << endl << "-- 2์์ " << "4 ๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.nextInRange(2, 4);
cout << n << ' ';
}
cout << endl;
}
์ค์ต ๋ฌธ์ 3 - 6
๋ฌธ์ : ๋ฌธ์ 5๋ฒ ์ฐธ๊ณ ํด์ ์ง์ ๋๋ค ์ ์๋ง ์ถ๋ ฅํ๋ EvenRandomํด๋์ค ๋ง๋ค๊ธฐ, 0๋ ์ง์๋ก ์ฒ๋ฆฌ
#include <iostream>
#include <cstdlib>
#include <random>
using namespace std;
class EvenRandom{
private:
mt19937 gen;
public:
EvenRandom() : gen((std::random_device())()){ }
int next()
{
uniform_int_distribution<> dist(0,RAND_MAX); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
while(true)
{
int n = dist(gen);
if(n % 2 == 0)
return n;
}
}
int nextInRange(int a, int b)
{
uniform_int_distribution<> dist(a, b); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
while(true)
{
int n = dist(gen);
if(n % 2 == 0)
return n;
}
}
};
int main()
{
EvenRandom r;
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.next();
cout << n << ' ';
}
cout << endl << endl << "-- 2์์ " << "10 ๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.nextInRange(2, 10);
cout << n << ' ';
}
cout << endl;
}
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class EvenRandom{
public:
EvenRandom();
int next();
int nextInRange(int a, int b);
};
EvenRandom::EvenRandom() {
srand((unsigned int)time(NULL));
}
int EvenRandom::next() {
while(true)
{
int n = rand();
if(n % 2 == 0)
return n;
}
}
int EvenRandom::nextInRange(int a, int b) {
while(true)
{
int n = rand();
if(n % 2 == 0)
return n % 5 * 2 + 2;
}
}
int main()
{
EvenRandom r;
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.next();
cout << n << ' ';
}
cout << endl << endl << "-- 2์์ " << "10 ๊น์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
int n = r.nextInRange(2, 10);
cout << n << ' ';
}
cout << endl;
}
์ค์ต ๋ฌธ์ 3 - 7
๋ฌธ์ : ๋์๋ฅผ ํ์๋ก ํ ์ง ์ง์๋ก ํ ์ง ์ ํํ ์ ์๋ SelectableRandomํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
#include <cstdlib>
#include <random>
using namespace std;
class SelectableRandom{
private:
mt19937 gen;
public:
SelectableRandom() : gen((std::random_device())()){ }
void next(int chkOddEven)
{
uniform_int_distribution<> dist(0,RAND_MAX); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
if(chkOddEven == 1)
{
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ํ์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = dist(gen);
if(n % 2 != 0)
{
cout << n << ' ';
break;
}
}
}
}
else if(chkOddEven == 2)
{
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = dist(gen);
if(n % 2 == 0)
{
cout << n << ' ';
break;
}
}
}
}
}
void nextInRange(int a, int b, int chkOddEven)
{
uniform_int_distribution<> dist(a, b); // 1 ~ 6๋ฒ์์ ๋์ ๋ง๋ค๊ธฐ, ํ๋ฅ ๋ชจ๋ ๋์ผ
if(chkOddEven == 1)
{
cout << endl << endl << "-- 2์์ " << "10 ๊น์ง์ ๋๋ค ํ์ ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = dist(gen);
if(n % 2 != 0)
{
cout << n << ' ';
break;
}
}
}
}
else if(chkOddEven == 2)
{
cout << endl << endl << "-- 2์์ " << "10 ๊น์ง์ ๋๋ค ์ง์ ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = dist(gen);
if(n % 2 == 0)
{
cout << n << ' ';
break;
}
}
}
}
}
};
int main()
{
// chkOddEven๊ฐ์ด 1์ด๋ฉด ํ์ ์ถ๋ ฅ 2๋ฉด ์ง์์ถ๋ ฅ
SelectableRandom r;
r.next(1);
cout << endl << endl;
r.next(2);
r.nextInRange(2, 10, 1);
r.nextInRange(2, 10, 2);
}
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
class SelectableRandom{
public:
SelectableRandom();
void next(int chkOddEven);
void nextInRange(int a, int b, int chkOddEven);
};
SelectableRandom::SelectableRandom() {
srand((unsigned int)time(NULL));
}
void SelectableRandom::next(int chkOddEven) {
if(chkOddEven == 1)
{
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ํ์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = rand();
if(n % 2 != 0)
{
cout << n << ' ';
break;
}
}
}
}
else if(chkOddEven == 2)
{
cout << "-- 0์์ " << RAND_MAX << "๊น์ง์ ์ง์ ๋๋ค ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = rand();
if(n % 2 == 0)
{
cout << n << ' ';
break;
}
}
}
}
}
void SelectableRandom::nextInRange(int a, int b, int chkOddEven) {
if(chkOddEven == 1)
{
cout << endl << endl << "-- 2์์ " << "10 ๊น์ง์ ๋๋ค ํ์ ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
cout << rand() % 4 * 2 + 3 << ' ';
}
}
else if(chkOddEven == 2)
{
cout << endl << endl << "-- 2์์ " << "10 ๊น์ง์ ๋๋ค ์ง์ ์ ์ 10 ๊ฐ--" << endl;
for(int i = 0; i < 10; i++)
{
while(true)
{
int n = rand();
if(n % 2 == 0)
{
cout << (n % 5 + 1) * 2 << ' ';
break;
}
}
}
}
}
int main()
{
SelectableRandom r;
r.next(1);
cout << endl << endl;
r.next(2);
r.nextInRange(2, 10, 1);
r.nextInRange(2, 10, 2);
}
์ค์ต ๋ฌธ์ 3 - 8
๋ฌธ์ : ์์์ ์ ๊ฐ์ง๋ 5๊ฐ์ ์ค์๋ฅผ ์
๋ ฅ ๋ฐ์ ์ ์ผ ํฐ ์๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ผ
#include <iostream>
#include <string>
using namespace std;
int main()
{
Integer n(30);
cout << n.get() << ' ';
n.set(50);
cout << n.get() << ' ';
Integer m("300");
cout << m.get() << ' ';
cout << m.isEven();
}
#include <iostream>
#include <string>
using namespace std;
class Integer{
int m_n;
public:
Integer(int n) : m_n(n){}
Integer(string n)
{
m_n = stoi(n);
}
int get()
{
return m_n;
}
void set(int n)
{
m_n = n;
}
bool isEven()
{
return (m_n % 2 == 0);
}
};
int main()
{
Integer n(30);
cout << n.get() << ' ';
n.set(50);
cout << n.get() << ' ';
Integer m("300");
cout << m.get() << ' ';
cout << m.isEven();
}
์ค์ต ๋ฌธ์ 3- 9
๋ฌธ์ : ์ฌ๊ฐํ์ ๋ด์ ํ๋ ํ์์ ์ถ์ํํ Oval ํด๋์ค ์ ์ธ๋ถ์ ๊ตฌํ๋ถ๋ก ๋๋์ด ๋ง๋ค๊ธฐ
#ifndef INFC___OVAL_H
#define INFC___OVAL_H
class Oval{
private:
int width, height;
public:
Oval();
Oval(int w, int h);
~Oval();
int getWidth();
int getHeight();
void set(int w, int h);
void show();
};
#endif //INFC___OVAL_H
#include "oval.h"
#include <iostream>
Oval::Oval() : width(1), height(1){}
Oval::Oval(int w, int h) : width(w), height(h){}
Oval::~Oval(){std::cout << "Oval์๋ฉธ : width = " << width << ", height = " << height << std::endl;}
int Oval::getWidth() {return width;}
int Oval::getHeight() {return height;}
void Oval::set(int w, int h) {width = w; height = h;}
void Oval::show() {std::cout << "width = " << width << ", height = " << height << std::endl;}
#include <iostream>
#include "oval.h"
using namespace std;
int main()
{
Oval a, b(3, 4);
a.set(10, 20);
a.show();
cout << b.getWidth() << ", " << b.getHeight() << endl;
}
์ค์ต ๋ฌธ์ 3 - 10
๋ฌธ์ : Add, Sub, Mul, Div 4๊ฐ์ ์ฌ์น์ฐ์ฐ ํด๋์ค ๋ง๋ค๊ธฐ
#ifndef INFC___CALCULATOR_H
#define INFC___CALCULATOR_H
class Add{
int m_a, m_b;
public:
~Add();
void setValue(int a, int b);
int calculate();
};
class Sub{
int m_a, m_b;
public:
~Sub();
void setValue(int a, int b);
int calculate();
};
class Mul{
int m_a, m_b;
public:
~Mul();
void setValue(int a, int b);
int calculate();
};
class Div{
int m_a, m_b;
public:
~Div();
void setValue(int a, int b);
int calculate();
};
#endif //INFC___CALCULATOR_H
#include "calculator.h"
Add::~Add() {}
Sub::~Sub() {}
Mul::~Mul() {}
Div::~Div() {}
void Add::setValue(int a, int b) {m_a = a; m_b = b;}
void Sub::setValue(int a, int b) {m_a = a; m_b = b;}
void Mul::setValue(int a, int b) {m_a = a; m_b = b;}
void Div::setValue(int a, int b) {m_a = a; m_b = b;}
int Add::calculate() {return m_a + m_b;}
int Sub::calculate() {return m_a - m_b;}
int Mul::calculate() {return m_a * m_b;}
int Div::calculate() {return m_a / m_b;}
#include <iostream>
#include "calculator.h"
using namespace std;
int main()
{
while(true)
{
int a, b;
char op;
cout << "๋ ์ ์์ ์ฐ์ฐ์๋ฅผ ์
๋ ฅํ์ธ์>>";
cin >> a >> b >> op;
if(op == '+')
{
Add temp;
temp.setValue(a, b);
cout << temp.calculate() << endl;
}
else if(op == '-')
{
Sub temp;
temp.setValue(a, b);
cout << temp.calculate() << endl;
}
else if(op == '*')
{
Mul temp;
temp.setValue(a, b);
cout << temp.calculate() << endl;
}
else if(op == '/')
{
Div temp;
temp.setValue(a, b);
cout << temp.calculate() << endl;
}
}
}
์ค์ต ๋ฌธ์ 3 - 11
๋ฌธ์ : ์ฃผ์ด์ง ์ฝ๋๋ฅผ ๋ณด๊ณ Box.cpp, Box.h, main.cpp๋ก ๋ถ๋ฆฌํ๊ธฐ
#include <iostream>
using namespace std;
class Box{
int width, height;
char fill;
public:
Box(int w, int h) {setSize(w, h); fill = '*';}
void setFill(char f) {fill = f;}
void setSize(int w, int h) {width = w; height = h;}
void draw();
};
void Box::draw() {
for(int n = 0; n < height; n++)
{
for(int m = 0; m < width; m++)
cout << fill;
cout << endl;
}
}
int main()
{
Box b(10, 2);
b.draw();
cout << endl;
b.setSize(7, 4);
b.setFill('^');
b.draw();
}
#ifndef INFC___BOX_H
#define INFC___BOX_H
class Box{
int width, height;
char fill;
public:
Box(int w, int h);
void setFill(char f);
void setSize(int w, int h);
void draw();
};
#endif //INFC___BOX_H
#include "Box.h"
#include <iostream>
Box::Box(int w, int h) {setSize(w, h); fill = '*';}
void Box::setFill(char f) {fill = f;}
void Box::setSize(int w, int h) {width = w; height = h;}
void Box::draw() {
for(int n = 0; n < height; n++)
{
for(int m = 0; m < width; m++)
std::cout << fill;
std::cout << std::endl;
}
}
#include <iostream>
#include "Box.h"
using namespace std;
int main()
{
Box b(10, 2);
b.draw();
cout << endl;
b.setSize(7, 4);
b.setFill('^');
b.draw();
}
์ค์ต ๋ฌธ์ 3 - 12
๋ฌธ์ : ์ฃผ์ด์ง ์ถ๋ ฅ๊ณผ ์ฝ๋๋ฅผ ๋ณด๊ณ Ram.cpp, Ram.h, Ram.cpp๋ก ๋ถ๋ฆฌํ๊ธฐ
#include <iostream>
using namespace std;
class Ram{
char mem[100 * 1024];
int size;
public:
Ram();
~Ram();
char read(int address);
void write(int address, char value);
};
int main()
{
Ram ram;
ram.write(100, 20);
ram.write(101, 30);
char res = ram.read(100) + ram.read(101);
ram.write(102, res);
cout << "102 ๋ฒ์ง์ ๊ฐ = " << (int)ram.read(102) << endl;
}
#ifndef INFC___RAM_H
#define INFC___RAM_H
class Ram{
char mem[100 * 1024];
int size;
public:
Ram();
~Ram();
char read(int address);
void write(int address, char value);
};
#endif //INFC___RAM_H
#include "Ram.h"
#include <iostream>
Ram::Ram() {
size = 100 * 1024;
for(int i = 0; i < size; i++)
{
mem[i] = 0;
}
}
Ram::~Ram() {
std::cout << "๋ฉ๋ชจ๋ฆฌ ์ ๊ฑฐ๋จ" << std::endl;
}
void Ram::write(int address, char value) {
mem[address] = value;
}
char Ram::read(int address) {
return mem[address];
}
#include <iostream>
#include "Ram.h"
using namespace std;
int main()
{
Ram ram;
ram.write(100, 20);
ram.write(101, 30);
char res = ram.read(100) + ram.read(101);
ram.write(102, res);
cout << "102 ๋ฒ์ง์ ๊ฐ = " << (int)ram.read(102) << endl;
}