6์ฅ ์์
ํจ์ ์ค๋ณต (๋คํ์ฑ)
๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค ์ ์๋ค.
์ด์ ๊ณผ์์ ๋ฐฐ์ด ์์ฑ์ ํจ์๋ ์ค๋ณต์ด๋ค.
์กฐ๊ฑด
1. ์ค๋ณต๋ ํจ์๋ค์ ์ด๋ฆ์ด ๋์ผ
2. ์ค๋ณต๋ ํจ์๋ค์ ๋งค๊ฐ๋ณ์ํ์ ์ด๋ ๊ฐ์๊ฐ ์๋ก ๋ฌ๋ผ์ผํ๋ค.
3. ๋ฆฌํดํ์ ์ ๊ณ ๋ ค๋์ง ์๋๋ค.
์๋ฉธ์๋ ์ค์ง ํ๋๋ง ์กด์ฌํ๋ฏ๋ก ์ค๋ณต๋ ์ ์๋ค.
๋ฐฐ์ด == ํฌ์ธํฐ์ด๋ฏ๋ก ์ค๋ณต ๋ถ๊ฐ๋ฅ
๋ํดํธ ๋งค๊ฐ ๋ณ์
๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ฃผ๋ ๊ฒ
ํด๋์ค ๋ฉค๋ฒํจ์๋ฅผ ํด๋์ค ๋ด์์ ์ ์ํ์ง ์๋ ๊ฒฝ์ฐ
์ ์ ๋ถ๋ถ์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ฃ๊ณ
ํด๋์ค ๋ฐ์์ ์ ์ํ ๋๋ ๊ฐ์ ๋ฃ์ง ์๋๋ค.int sum(int a = 3, int b = 5){return a + b}; // ํจ์ ์ฌ์ฉ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด a = 3, b = 5๊ฐ // ์๋์ผ๋ก ๋ค์ด๊ฐ 8์ ๋ฆฌํดํ๋ค.
ย
์กฐ๊ฑด
๋งค๊ฐ๋ณ์๋ ๋์ ๋ชฐ๋ ค์์ด์ผํ๋ค.int sum(int a, int b = 5) (o) int sum(int a = 3, int b) (x)
ํจ์ ์ฌ์ฉ์ ๋งค๊ฐ๋ณ์๋ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ ๋ฌ๋๋ค.
sum(2); // a = 2 b = 5 sum(2, 3); // a = 2 b = 3
ํจ์ ์ค๋ณต ๊ฐ์ํ
์์ฑ์ ์์)Shape(){name = "๋ค๋ชจ";} shape(string name){this->name = name;}
๊ฐ์ํ
shape(string name = "๋ค๋ชจ"){this->name = name;}
ย
๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ค๊ณ ํจ์ ์ค๋ณต์ ํ ์๋ ์๋ค.
ํจ์ ์ค๋ณต์ ๋ชจํธ์ฑ
์์ธ
ํ ๋ณํ, ์ฐธ์กฐ ๋งค๊ฐ ๋ณ์, ๋ํดํธ ๋งค๊ฐ ๋ณ์
ํ๋ณํdouble foo(double a); float foo(float a); foo(4); // double๋ก ํ ์ง float๋ก ํ ์ง ๋ชจํธ์ฑ ๋ฐ์
์ฐธ์กฐ๋งค๊ฐ๋ณ์
ํจ์ ์ฌ์ฉ์ ์ด๋ค๊ฑธ ์จ์ผํ ์ง ๋ชจํธ์ฑ ๋ฐ์int foo(int a, int b){ return a + b; } int foo(int a, int &b){ return a + b; }
๋ํดํธ ๋งค๊ฐ ๋ณ์
ํจ์ ์ฌ์ฉ์ ๋งค๊ฐ๋ณ์๋ก ํ๋๋ฅผ ์ฃผ์๋ค๋ฉด ์ด๋ค๊ฑธ ์จ์ผํ ์ง ๋ชจํธ์ฑ ๋ฐ์void foo(int a); void foo(int a, string b = "1234");
static ๋ฉค๋ฒ
ํด๋์ค์์ ๋ฉค๋ฒ๊ฐ static์ ํน์ฑ์ ๊ฐ์ง๋ค. ํน์ฑ 1. ํ๋ก๊ทธ๋จ ์์ํ ๋ ์์ฑ๋๊ณ ๋๋ ๋ ์๋ฉธ 2. ์ ์ธ๋ ๋ฒ์ ๋ด์์ ์ ์ญ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
ํด๋์ค์์ staticํน์ฑ
ํด๋์ค ๋ด์์ static๋ฉค๋ฒ ๋ณ์๋ ์ด๊ธฐํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
ํด๋์ค๊ฐ์ ๊ณต์ ๋ฅผ ์ํด ๊ฐ์ฒด๋ด๋ถ ๊ณต๊ฐ์ด ์๋ ๋ณ๋์ ๊ณต๊ฐ์ ์ ์ฅ
static๋ฉค๋ฒ ํจ์๋ static๋ฉค๋ฒ ๋ณ์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
static๋ฉค๋ฒ ํจ์๋ this๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
(๊ฐ์ฒด๊ฐ ์์ฑ๋๊ธฐ ์ ์ ์ด๋ฏธ ์ ์ธ๋๋ฏ๋ก)
์ ์ธ ๋ฐ ์ ์
static ๋ฉค๋ฒ ๋ณ์;
static ๋ฉค๋ฒ ํจ์(){};
์ฌ์ฉ
์ผ๋ฐ์ ์ธ ๋ฉค๋ฒ ํจ์๋ ๋ฉค๋ฒ ๋ณ์์ฒ๋ผ ์ฌ์ฉํ๋ฉด๋๋ค.
ํ์ง๋ง, ๊ฐ์ฒด๋ฅผ ํตํ์ง ์์๋ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํด ๋ฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅ!
Shape::name = "์ผ๊ฐํ";
๋ช ํ C++ํ๋ก๊ทธ๋๋ฐ ์ฑ
https://book.naver.com/bookdb/book_detail.naver?bid=13395206
โ ๏ธ ์ฃผ์ โ ๏ธ
1. ์ฌ๊ธฐ์๋ถํฐ๋ ์ค์ต๋ฌธ์ ์ ๋ต์ ๋๋ค.
2.์ ๊ฐ ์์ฑํ ์ ๋ต์ด ํ๋ฆด ์ ์์ต๋๋ค. ํน์ ํ๋ฆฐ๊ฒ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ ์์ ํ๊ฒ ์ต๋๋ค.
3. C++๋ฅผ ๊ณต๋ถํ์๋ ํ์์ด์๋ผ๋ฉด ๋ณด์๊ธฐ ์ ์ ์ง์ ๊ผญ ํ ๋ฒ ํ์ด๋ณด์ธ์!
์ค์ต ๋ฌธ์ 6 - 1
๋ฌธ์ : ํจ์ ์ค๋ณต์ผ๋ก addํจ์ ๊ตฌํํ๊ธฐ
#include <iostream>
using namespace std;
int add(int *a, int b)
{
int sum = 0;
for(int i = 0; i < b; i++)
{
sum += (*a + i);
}
return sum;
}
int add(int *a, int b, int *c)
{
int sum = 0;
for(int i = 0; i < b; i++)
{
sum += (*a + i) + (*c + i);
}
return sum;
}
int add(int *a, int *b, int c = 5)
{
int sum = 0;
for(int i = 0; i < c; i++)
{
sum += (*a + i) + (*b + i);
}
return sum;
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
int b[] = {6, 7, 8, 9, 10};
int c = add(a, 5);
int d = add(a, 5, b);
cout << c << endl;
cout << d << endl;
int e = add(a, b);
cout << e << endl;
}
์ค์ต ๋ฌธ์ 6 - 2
๋ฌธ์ : ํจ์ ์ค๋ณต์ผ๋ก ์์ฑ์ ํจ์ ๊ตฌํํ๊ธฐ
#include <iostream>
#include <string>
using namespace std;
class Person{
int id;
double weight;
string name;
public:
/*
Person(){
id = 1;
weight = 20.5;
name = "grace";
}
Person(int id, string name){
this->id = id;
weight = 20.5;
this->name = name;
}
Person(int id, string name, double weight){
this->id = id;
this->weight = weight;
this->name = name;
}
*/
Person(int id = 1, string name = "grace", double weight = 20.5){
this->id = id;
this->weight = weight;
this->name = name;
}
void show(){cout << id << ' ' << weight << ' ' << name << endl;}
};
int main()
{
Person grace, ashley(2, "Ashley"), helen(3, "Helen", 32.5);
grace.show();
ashley.show();
helen.show();
}
์ค์ต ๋ฌธ์ 6 - 3
๋ฌธ์ : ํจ์ ์ค๋ณต์ผ๋ก big()ํจ์ ๊ตฌํํ๊ธฐ
#include <iostream>
using namespace std;
/*
int big(int a, int b)
{
int max = a > b ? a : b;
return max > 100 ? 100 : max;
}
int big(int a, int b, int c)
{
int max = a > b ? a : b;
return max > c ? c : max;
}
*/
int big(int a, int b, int c = 100)
{
int max = a > b ? a : b;
return max > c ? c : max;
}
int main()
{
int x = big(3, 5);
int y = big(300, 60);
int z = big(30, 60, 50);
cout << x << ' ' << y << ' ' << z << endl;
}
์ค์ต ๋ฌธ์ 6 - 4
๋ฌธ์ : ์ค๋ณต ์์ฑ์ ํ๋์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์์ฑ์๋ก ๋ฐ๊พธ๊ธฐ
class MyVector{
int *mem;
int size;
public:
/*
MyVector();
MyVector(int n, int val);
*/
MyVector(int n = 0, int val = 0);
~MyVector() { delete [] mem;}
};
/*
MyVector::MyVector() {
mem = new int[100];
size = 100;
for(int i = 0; i < size; i++) mem[i] = 0;
}
MyVector::MyVector(int n, int val) {
mem = new int[n];
size = n;
for(int i = 0; i < size; i++) mem[i] = val;
}
*/
MyVector::MyVector(int n, int val) {
mem = new int[n];
size = n;
for(int i = 0; i < size; i++) mem[i] = val;
}
์ค์ต ๋ฌธ์ 6 - 5
๋ฌธ์ : ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก 2๊ฐ์ static๋ฉค๋ฒํจ์๋ฅผ ์ง๋ ArrayUtility ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๊ตฌํํ๊ธฐ
#include <iostream>
using namespace std;
class ArrayUtility{
public:
static void intToDouble(int source[], double dest[], int size){
for(int i = 0; i < size; i++)
{
dest[i] = double(source[i]);
}
}
static void doubleToInt(double source[], int dest[], int size){
for(int i = 0; i < size; i++)
{
dest[i] = int(source[i]);
}
}
};
int main()
{
int x[] = {1, 2, 3, 4, 5};
double y[5];
double z[] = {9.9, 8.8, 7.7, 6.6, 5.5};
ArrayUtility::intToDouble(x, y,5);
for(int i = 0; i < 5; i++) cout << y[i] << ' ';
cout << endl;
ArrayUtility::doubleToInt(z, x, 5);
for(int i = 0; i < 5; i++) cout << x[i] << ' ';
cout << endl;
}
์ค์ต ๋ฌธ์ 6 - 6
๋ฌธ์ : ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก 2๊ฐ์ static๋ฉค๋ฒํจ์๋ฅผ ์ง๋ ArrayUtility2 ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๊ตฌํํ๊ธฐ
#include <iostream>
using namespace std;
class ArrayUtility2{
public:
static int* concat(int s1[], int s2[], int size){
int *p = new int[size];
cout << "ํฉ์น ์ ์ ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค" << endl;
for(int i = 0; i < 10; i++)
{
if(i < 5)
p[i] = s1[i];
else if(i >= 5)
p[i] = s2[i - 5];
}
return p;
}
static int* remove(int s1[], int s2[], int size, int& retsize){
cout << "๋ฐฐ์ด x[]์์ y[]๋ฅผ ๋บ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. ";
int *p = new int[size];
int idx = 0;
for(int i = 0; i < size; i++)
{
for(int j = 0; j < size; j++)
{
if(s1[i] == s2[j])
{
retsize--;
break;
}
if(j == 4)
{
p[idx++] = s1[i];
}
}
}
return retsize != 0 ? p : nullptr;
}
};
int main()
{
int x[5];
int y[5];
cout << "์ ์๋ฅผ 5 ๊ฐ ์
๋ ฅํ๋ผ. ๋ฐฐ์ด x์ ์ฝ์
ํ๋ค>>";
for(int i = 0; i < 5; i++)
{
cin >> x[i];
}
cout << "์ ์๋ฅผ 5 ๊ฐ ์
๋ ฅํ๋ผ. ๋ฐฐ์ด y์ ์ฝ์
ํ๋ค>>";
for(int i = 0; i < 5; i++) {
cin >> y[i];
}
int *p = new int[10];
p = ArrayUtility2::concat(x, y, 10);
for(int i = 0; i < 10; i++)
cout << p[i] << ' ';
cout << endl;
int retsize = 5;
p = ArrayUtility2::remove(x, y, 5, retsize);
cout << "๊ฐ์๋ " << retsize << endl;
for(int i = 0; i < retsize; i++)
cout << p[i] << ' ';
cout << endl;
delete [] p;
}
์ค์ต ๋ฌธ์ 6 - 7
๋ฌธ์ : static๋ฉค๋ฒ๋ฅผ ์ง๋ Randomํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <random>
using namespace std;
class Random{
public:
static void seed(){srand((unsigned)time(0));}
static int nextInt(int min = 0, int max = 32767){
return rand() % max + min;
}
static char nextAlphabet(){
int n = rand() % 2;
int a = rand() % 26 + 65;
return char(32 * n + a);
}
static double nextDouble(){
return double(rand()) / (double)RAND_MAX;
}
};
int main()
{
Random::seed();
cout << "1์์ 100๊น์ง ๋๋คํ ์ ์ 10๊ฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค" << endl;
for(int i = 0; i <10; i++)
{
cout << Random::nextInt(1, 100) << ' ';
}
cout << endl;
cout << "์ํ๋ฒณ์ ๋๋คํ๊ฒ 10๊ฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค" << endl;
for(int i = 0; i <10; i++)
{
cout << Random::nextAlphabet() << ' ';
}
cout << endl;
cout << "๋๋คํ ์ค์๋ฅผ 10๊ฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค" << endl;
for(int i = 0; i <10; i++)
{
if(i == 5)
cout << endl;
cout << Random::nextDouble() << ' ';
}
}
์ค์ต ๋ฌธ์ 6 - 8
๋ฌธ์ : ๋๋ฒ๊น
์ํ Traceํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class Trace{
static int index;
static char texts[100][100];
public :
static void put(string func, string text){
string temp = func + ":" + text;
strcpy(texts[index], temp.c_str());
index++;
}
static void print(string func = "main()"){
if(func == "main()")
{
cout << "----- ๋ชจ๋ Trace ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค. -----" << endl;
for(int i = 0; i < index; i++)
{
cout << texts[i] << endl;
}
}
else
{
cout << "----- "<< func << "ํ๊ทธ์ Trace ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค. -----" << endl;
for(int i = 0; i < index; i++)
{
char temp[100];
strcpy(temp, texts[i]);
if(func == strtok(temp, ":"))
{
cout << texts[i] << endl;
}
}
}
}
};
int Trace::index = 0;
char Trace::texts[100][100] = {NULL,};
void f(){
int a, b, c;
cout << "๋ ๊ฐ์ ์ ์๋ฅผ ์
๋ ฅํ์ธ์>>";
cin >> a >> b;
Trace::put("f()", "์ ์๋ฅผ ์
๋ ฅ๋ฐ์์");
c = a + b;
Trace::put("f()", "ํฉ ๊ณ์ฐ");
cout << "ํฉ์ " << c << endl;
}
int main()
{
Trace::put("main()", "ํ๋ก๊ทธ๋จ ์์ํฉ๋๋ค");
f();
Trace::put("main()", "์ข
๋ฃ");
Trace::print("f()");
Trace::print();
}
์ค์ต ๋ฌธ์ 6 - 9
๋ฌธ์ : ๊ฒ์ํ ๊ธฐ๋ฅ Boardํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
#include <string>
using namespace std;
class Board{
static string boards[100];
static int index;
public:
static void add(string text)
{
boards[index++] = text;
}
static void print(){
cout << "************* ๊ฒ์ํ์
๋๋ค. *************" << endl;
for(int i = 0; i < index; i++)
{
cout << i + 1 << ": " << boards[i] << endl;
}
cout << endl;
}
};
int Board::index = 0;
string Board::boards[100] = {};
int main()
{
Board::add("์ค๊ฐ๊ณ ์ฌ๋ ๊ฐ๋
์๋ ์์จ ์ํ์
๋๋ค.");
Board::add("์ฝ๋ฉ ๋ผ์ด์ง ๋ง์ด ์ด์ฉํด ์ฃผ์ธ์.");
Board::print();
Board::add("์ง์๋ฆฐ ํ์์ด ๊ฒฝ์ง๋ํ ์
์ํ์์ต๋๋ค. ์ถํํด์ฃผ์ธ์");
Board::print();
}