5์ฅ ์์
๊ฐ์ ์ํ ํธ์ถ
๊ฐ์ ์ํ ํธ์ถ์ ๋จ์ํ ๊ฐ์ด ๋ณต์ฌ๋์ด ํจ์์ ์คํ์ ์ ์ฅ๋๋ค.
๊ฐ์ด ๋ณต์ฌ๋์๊ธฐ์ mainํจ์๋ด ๋ณ์์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.swapํจ์ => swap(int a, int b) mainํจ์ => swap(a, b);
์ฃผ์์ ์ํ ํธ์ถ
ํจ์์ ํฌ์ธํฐ ๋งค๊ฐ๋ณ์๊ฐ ์คํ์ ์์ฑ๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ค์
mainํจ์์ m, n์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ํจ์ ์ํ์ mainํจ์์์๋ ๊ฐ์ด ๋ฐ๋๋ค.swapํจ์ => swap(int *a, int *b) mainํจ์ => swap(&a, &b);
๊ฐ์ ์ํ ํธ์ถ๋ก ๊ฐ์ฒด ์ ๋ฌ
๊ฐ์ฒด๋ฅผ ๊ฐ์ ์ํ ํธ์ถ์ ์์ฑ์๋ ์คํ๋์ง ์๊ณ ์๋ฉธ์๋ง ์คํ๋๋ ๋น๋์นญ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ = ๋ณต์ฌ์์ฑ์
์ฃผ์์ ์ํ ํธ์ถ๋ก ๊ฐ์ฒด ์ ๋ฌ
๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ ๋ฌํ๋ฏ๋ก ๋น๋์นญ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
๊ฐ์ฒด ์นํ
Circle c1(5) Circle c2(30) c1 = c2; // c1์ c2์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋นํธ๋จ์๋ก ๋ณต์ฌ๋๋ค.
๊ฐ์ฒด ๋ฆฌํด
Shape getName() { Shape temp("๋ค๋ชจ"); return temp; }
์ฐธ์กฐ
๋ณ์์ ๋ณ๋ช ๊ณผ ๊ฐ์ ๊ฐ๋
// ์ ์ธ์ &๋ฅผ ์ด์ฉํ๋ค. int num = 7; int &refnum = n; // => num๊ณผ refnum์ ๋์ผํ ๋ณ์๋ค. refnum = 9; // => num์ ๊ฐ์ 9๊ฐ ๋๋ค.
๊ฐ์ฒด ์ฐธ์กฐ
์ฐธ์กฐ๋ณ์๋ ํฌ์ธํฐ๊ฐ ์๋๋ฏ๋ก -> ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
Shape nemo; Shape &refnemo = nemo; refnemo.setName("๋ค๋ชจ");
ํฌ์ธํฐ์ ๊ฐ์ด
p๋ refnum์ ์ฃผ์๋ฅผ ๊ฐ์ง๋ค. ์ด๋ num์ ์ฃผ์๋ ๊ฐ์ง๋ค๋ ๊ฒ์ ๋ปํ๋ค.int *p = &refnum; *p = 45; // n = 45, refnum = 45;
์ฐธ์กฐ ์ฃผ์์ฌํญ
- ์ ์ธํ ๋ฐ๋ก ์ด๊ธฐํ
- ์ฐธ์กฐ์ &์ ์์น ํ์ ๊ณผ ๋ณ์๋ช ์ฌ์ด ์ด๋ ์์น๋ ๋ฌด๊ดํ๋ค.
- ์ฐธ์กฐ ๋ณ์๋ก๋ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค.
- ์ฐธ์กฐ ๋ณ์์ ๋ํ ์ฐธ์กฐ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ์กฐ์ ๋ํ ํธ์ถ
๋งค๊ฐ๋ณ์๋ฅผ ์ฐธ์กฐํ์ ์ผ๋ก ์ ์ธํ๋ค.
mainํจ์์ ๋ณ์๊ฐ ์ฐธ์กฐ๋์ด ํจ์์ ๋ค์ด๊ฐ๋ฏ๋ก ํจ์๋ด์์ ๊ฐ์ ๋ณํ๊ฐ ์๋ค๋ฉด mainํจ์์๋ ๋ฐ์๋๋ค.
๊ฐ์ ์ํ ํธ์ถ๊ณผ ์ฃผ์์ ์ํ ํธ์ถ๊ณผ๋ ๋ค๋ฅด๊ฒ ํจ์์ ์คํ๊ณต๊ฐ์ด ๋ง๋ค์ด์ง์ง ์๊ณ ์ด๋ฆ๋ง ์กด์ฌํ๋ค.swapํจ์ => swap(int &a, int &b) mainํจ์ => swap(a, b);
์ฐธ์กฐ์ ์ํ ํธ์ถ๋ก ๊ฐ์ฒด ์ ๋ฌ
์ฐธ์กฐ ๋งค๊ฐ ๋ณ์๋ก ์ด๋ฃจ์ด์ง ๋ชจ๋ ์ฐ์ฐ์ ์๋ณธ ๊ฐ์ฒด์ ๋ํ ์ฐ์ฐ์ด ๋๋ค.
์ฐธ์กฐ ๋งค๊ฐ ๋ณ์๋ ์ด๋ฆ๋ง ์์ฑ๋๋ฏ๋ก,
โ๏ธ์์ฑ์์ ์๋ฉธ์๋ ์์ ์คํ๋์ง ์๋๋ค.โ๏ธ์ฐธ์กฐ ๋ฆฌํด
char c = 'a'; char& find() { return c; } char a = find(); // a = 'a' char &ref = find(); // ref๋ c์ ๋ํ ์ฐธ์กฐ ref = 'M'; // c = 'M' find() = 'b' // c = 'b'๊ฐ ๋๋ค.
์์๋ณต์ฌ
ํฌ์ธํฐ ๋ณ์์ ๊ด๋ จ๋์ด ์๋ค.
์์ ๋ณต์ฌ :
์ฃผ์๊ฐ์ ๋ณต์ฌ, ์๋ณธ ๋๋ ์ฌ๋ณธ์ด ๋ฐ๋๋ฉด ์ฌ๋ณธ ๋๋ ์๋ณธ๋ ๋ฐ๋๋ค.์นํ๋ฌธ์ ์์ ๋ณต์ฌ๋ค.
๊น์ ๋ณต์ฌ :
๋ณ์ ๋ฐ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ณต์ฌํ๋ค. ์๋ณธ ๋๋ ์ฌ๋ณธ์ด ๋ฐ๋๋๋ผ๋ ๋ฐ๋์ง ์๋๋ค.
๊ฐ์ฒด์์ ํฌ์ธํฐ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์์ ๋ณต์ฌ๋ฅผ ์ฌ์ฉํด๋ ์๊ด์ ์๋ค.๋ณต์ฌ์์ฑ์
// ์ ์ธ class Shape{ string name; public: Shape(const Shape& c); };
//์ฌ์ฉ Shape nemo(10); // ์ผ๋ฐ ์์ฑ์ ํธ์ถ shape cNemo(nemo); // ๋ณต์ฌ์์ฑ์ ํธ์ถํด์ cNemo์ nemo๋ณต์ฌ
Shape (const Shape& c){ this->name = c.name; }
๋ํดํธ ๋ณต์ฌ ์์ฑ์
๋ณต์ฌ์์ฑ์๋ฅผ ์ ์ธํ์ง ์๊ณ ์ฌ์ฉํ๋๋ผ๋ ์๋ฌต์ ์ผ๋ก ๋ํดํธ ๋ณต์ฌ์์ฑ์๊ฐ ํธ์ถ๋์ด ์ปดํ์ผ๋๋ค.
Shape(const Circle& c){ this->name = c.name; }
๋ณต์ฌ์์ฑ์ ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
๋์ ํ ๋น ๋ ํฌ์ธํฐ ๋ฉค๋ฒ ๋ณ์๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ํ๋ก๊ทธ๋จ ์ข ๋ฃ๋ก ์๋ฉธ์์ ์ํด ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ๋์ ํ ๋น ๋ ํฌ์ธํฐ ๋ฉค๋ฒ ๋ณ์๊ฐ ๋ฐํ์ด ๋๋ค.
์ด ๋ ์๋ณธ์ ๊ฐ์ฒด๋ ๋ฐํ์ด ์งํ๋๋๋ฐ ๋ฐํํ ๊ฒ์ ํ๋ฒ ๋ ๋ฐํํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.๋ฐ๋ผ์ ์ฌ์ฉ์ ๋ณต์ฌ ์์ฑ์(๊น์๋ณต์ฌ)๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์
class Shape{ char *name; public: Shape(const char *name) // ์์ฑ์ { int len = strlen(name); this->name = new char[len + 1]; strcpy(this->name, name); } Shape(const Shape &c){ // ์ฌ์ฉ์ ๋ณต์ฌ ์์ฑ์ unsigned int len = strlen(c.name); this->name = new char[len + 1]; // ํ์ผ๋ก ๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋ ๋ชจ์ต strcpy(this->name, c.name); } };
๋ณต์ฌ ์์ฑ์ ์ฃผ์์ฌํญ
ํธ์ถ ๋ฐฉ๋ฒ
- Shape cNemo = nemo; // ๊ฐ์ฒด๊ฐ ๊ฐ์ฒด๋ก ์ด๊ธฐํ๋ ๊ฒฝ์ฐ
- Shape cNemo(nemo);
- ์นํ๋ฌธ์ ๋ณต์ฌ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ค.
ex) cNemo = nemo;- ๊ฐ์ ์ํ ํธ์ถ์ ๋ณต์ฌ์์ฑ์๊ฐ ์๋ค๋ฉด ๋งค๊ฐ๋ณ์๋ก ๋ณต์ฌ์์ฑ์๊ฐ ํธ์ถ๋์ด ๋ณ์๋ก ์ ๋ฌ๋๋ค.
๋ณต์ฌ์์ฑ์๊ฐ ์๋๋ผ๋ ๋ํดํธ ๋ณต์ฌ ์์ฑ์๋ก ๋งค๊ฐ๋ณ์๊ฐ ์ ๋ฌ๋๋ค.- ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ ๊ฒฝ์ฐ๋ ๋ณต์ฌ์์ฑ์๊ฐ ํธ์ถ๋๊ณ ๋ฆฌํดํ๋ค.
๋ช ํ C++ํ๋ก๊ทธ๋๋ฐ ์ฑ
https://book.naver.com/bookdb/book_detail.naver?bid=13395206
โ ๏ธ ์ฃผ์ โ ๏ธ
1. ์ฌ๊ธฐ์๋ถํฐ๋ ์ค์ต๋ฌธ์ ์ ๋ต์ ๋๋ค.
2.์ ๊ฐ ์์ฑํ ์ ๋ต์ด ํ๋ฆด ์ ์์ต๋๋ค. ํน์ ํ๋ฆฐ๊ฒ ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ ์์ ํ๊ฒ ์ต๋๋ค.
3. C++๋ฅผ ๊ณต๋ถํ์๋ ํ์์ด์๋ผ๋ฉด ๋ณด์๊ธฐ ์ ์ ์ง์ ๊ผญ ํ ๋ฒ ํ์ด๋ณด์ธ์!
์ค์ต ๋ฌธ์ 5 - 1
๋ฌธ์ : ๊ฐ์ฒด๋ฅผ ๊ตํํ๋ swapํจ์๋ฅผ ์ฐธ์กฐ์ ์ํ ํธ์ถ๋ก ๊ตฌํํ๊ธฐ
#include <iostream>
using namespace std;
class Circle{
int radius;
public:
Circle(){}
Circle(const Circle &a)
{
this->radius = a.radius;
}
int getRadius()
{
return radius;
}
void setRadius(int a)
{
this->radius = a;
}
};
void swap(Circle &a, Circle &b)
{
Circle temp;
temp = a;
a = b;
b = temp;
}
int main()
{
Circle a;
Circle b;
a.setRadius(3);
b.setRadius(9);
cout << "a : " << a.getRadius() << " b : " << b.getRadius() << endl;
swap(a, b);
cout << "a : " << a.getRadius() << " b : " << b.getRadius() << endl;
};
์ค์ต ๋ฌธ์ 5 - 2
๋ฌธ์ : halfํจ์ ๊ตฌํํ๊ธฐ
10
#include <iostream>
using namespace std;
void half(double &n)
{
n = n / 2;
}
int main()
{
double n = 20;
half(n);
cout << n;
}
์ค์ต ๋ฌธ์ 5 - 3
๋ฌธ์ : combine()ํจ์ ๊ตฌํํ๊ธฐ
#include <iostream>
#include <string>
using namespace std;
void combine(string str1, string str2, string &str3)
{
str3.append(str1).append(" ").append(str2);
}
int main()
{
string text1("I love you"), text2("very much");
string text3;
combine(text1, text2, text3);
cout << text3;
}
์ค์ต ๋ฌธ์ 5 - 4
๋ฌธ์ : bigger()ํจ์ ์์ฑํ๊ธฐ
#include <iostream>
using namespace std;
bool bigger(int a, int b, int &big)
{
if(a == b)
return true;
else{
big = a > b ? a : b;
return false;
}
}
int main()
{
int a, b;
int big;
cin >> a >> b;
if(!bigger(a, b, big))
{
cout << big << endl;
}
}
์ค์ต ๋ฌธ์ 5 - 5
๋ฌธ์ : increaseByํจ์ ์์ ํ๊ธฐ
#include <iostream>
using namespace std;
class Circle{
int radius;
public:
Circle(int r){radius = r;}
int getRadius(){return radius;};
void setRadius(int r){radius = r;}
void show(){cout << "๋ฐ์ง๋ฆ์ด " << radius << "์ธ ์" << endl;}
};
void increaseBy(Circle &a, Circle b)
{
int r= a.getRadius() + b.getRadius();
a.setRadius(r);
}
int main()
{
Circle x(10), y(5);
increaseBy(x, y);
x.show();
}
์ค์ต ๋ฌธ์ 5 - 6
๋ฌธ์ : findํจ์ ์์ฑํ๊ธฐ
#include <iostream>
#include <cstring>
using namespace std;
char &find(char a[], char c, bool &success)
{
for(int i = 0; i < strlen(a); i++)
{
if(a[i] == c)
{
success = true;
return a[i];
}
}
success = false;
return a[strlen(a)];
}
int main()
{
char s[] = "Mike";
bool b = false;
char &loc = find(s, 'M', b);
if(!b)
{
cout << "M์ ๋ฐ๊ฒฌํ ์ ์๋ค" << endl;
return 0;
}
loc = 'm';
cout << s << endl;
}
์ค์ต ๋ฌธ์ 5 - 7
๋ฌธ์ : ์คํํด๋์ค MyIntStack๊ตฌํํ๊ธฐ
#include <iostream>
using namespace std;
class MyIntStack{
int p[10];
int tos;
public:
MyIntStack();
bool push(int n);
bool pop(int &n);
};
MyIntStack::MyIntStack() {
for(int i = 0; i < 10; i++)
p[i] = 0;
tos = 0;
}
bool MyIntStack::push(int n) {
if(tos > 9)
return false;
else
{
p[tos] = n;
tos += 1;
return true;
}
}
bool MyIntStack::pop(int &n) {
if(tos < 1)
return false;
else
{
tos -= 1;
n = p[tos];
return true;
}
}
int main()
{
MyIntStack a;
for(int i = 0; i < 11; i++)
{
if(a.push(i))
cout << i << ' ';
else
cout << endl << i + 1 << " ๋ฒ์งธ stack full" << endl;
}
int n;
for(int i = 0; i < 11; i++)
{
if(a.pop(n))
cout << n << ' ';
else
cout << endl << i + 1 << " ๋ฒ์งธ stack empty" << endl;
}
cout << endl;
}
์ค์ต ๋ฌธ์ 5 - 8
๋ฌธ์ : 7๋ฒ๋ฌธ์ ์์ ํ๊ธฐ
#include <iostream>
using namespace std;
class MyIntStack{
int *p;
int tos;
int size;
public:
MyIntStack();
MyIntStack(int size);
MyIntStack(const MyIntStack &s);
~MyIntStack();
bool push(int n);
bool pop(int &n);
};
MyIntStack::MyIntStack() {
for(int i = 0; i < 10; i++)
p[i] = 0;
tos = 0;
}
MyIntStack::MyIntStack(int size) {
p = new int[size];
for(int i = 0; i < size; i++)
p[i] = 0;
tos = 0;
}
MyIntStack::MyIntStack(const MyIntStack &s) {
this->tos = s.tos;
this->size = s.size;
p = new int[size];
for(int i = 0; i < size; i++)
{
p[i] = s.p[i];
}
}
MyIntStack::~MyIntStack() {
delete [] p;
}
bool MyIntStack::push(int n) {
if(tos > 9)
return false;
else
{
p[tos] = n;
tos += 1;
return true;
}
}
bool MyIntStack::pop(int &n) {
if(tos < 1)
return false;
else
{
tos -= 1;
n = p[tos];
return true;
}
}
int main()
{
MyIntStack a(10);
a.push(10);
a.push(20);
MyIntStack b = a;
b.push(30);
int n;
a.pop(n);
cout << "์คํ a์์ ํํ ๊ฐ " << n << endl;
b.pop(n);
cout << "์คํ b์์ ํํ ๊ฐ " << n << endl;
}
์ค์ต ๋ฌธ์ 5 - 9
๋ฌธ์ : Accumulatorํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
using namespace std;
class Accumulator{
int value;
public:
Accumulator(int value);
Accumulator &add(int n);
int get();
};
Accumulator::Accumulator(int value) {this->value = value;}
Accumulator &Accumulator::add(int n)
{
this->value += n;
return *this;
}
int Accumulator::get() {
return value;
}
int main()
{
Accumulator acc(10);
acc.add(5).add(6).add(7);
cout << acc.get();
}
์ค์ต ๋ฌธ์ 5 - 10
๋ฌธ์ : appendํจ์ ๊ตฌํํ๊ธฐ
#include <iostream>
#include <string>
using namespace std;
class Buffer{
string text;
public:
Buffer(string text){this->text = text;}
void add(string next){text += next;}
void print(){cout << text << endl;}
};
Buffer &append(Buffer &buf, string text)
{
buf.add(text);
return buf;
}
int main()
{
Buffer buf("Helllo");
Buffer &temp = append(buf, "Guys");
temp.print();
buf.print();
}
์ค์ต ๋ฌธ์ 5 - 11
๋ฌธ์ : Bookํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class Book{
char *title;
int price;
public:
Book(const char* title, int price){
unsigned int len = strlen(title);
this->title = new char[len + 1];
strcpy(this->title, title);
this->price = price;
}
/* ์ปดํ์ผ๋ฌ๊ฐ ์ฝ์
ํ๋ ๋ํดํธ ๋ณต์ฌ ์์ฑ์
Book(const Book &b)
{
this->title = b.title;
this->price = b.price;
}
*/
Book(const Book &b)
{
unsigned int len = strlen(b.title);
this->title = new char[len + 1];
strcpy(this->title, b.title);
this->price = b.price;
}
~Book(){
delete [] title;
}
void set(char* title, int price){
if(this->title){
delete [] this->title;
this->title = new char[strlen(title) + 1];
strcpy(this->title, title);
this->price = price;
}
else
{
this->title = new char[strlen(title) + 1];
strcpy(this->title, title);
this->price = price;
}
}
void show() {cout << title << ' ' << price << "์" << endl;}
};
int main()
{
Book cpp("๋ช
ํC++", 10000);
Book java = cpp;
java.set("๋ช
ํ์๋ฐ", 12000);
cpp.show();
java.show();
}
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class Book{
string title;
int price;
public:
Book(string title, int price){
unsigned int len = title.length();
this->title = title;
this->price = price;
}
void set(string title, int price){
this->title = title;
this->price = price;
}
void show() {cout << title << ' ' << price << "์" << endl;}
};
int main()
{
Book cpp("๋ช
ํC++", 10000);
Book java = cpp;
java.set("๋ช
ํ์๋ฐ", 12000);
cpp.show();
java.show();
}
์ค์ต ๋ฌธ์ 5 - 12
๋ฌธ์ : Deptํด๋์ค ์์ฑํ๊ธฐ
#include <iostream>
using namespace std;
class Dept{
int size;
int *scores;
public:
Dept(int size)
{
this->size = size;
scores = new int[size];
}
Dept(const Dept& dept)
{
this->size = dept.size;
this->scores = new int[size];
for(int i = 0; i < size; i++)
{
this->scores[i] = dept.scores[i];
}
}
~Dept(){
delete [] scores;
}
int getSize(){return size;}
void read(){
cout << size << "๊ฐ ์ ์ ์
๋ ฅ>> ";
for(int i = 0; i < size; i++){
cin >> scores[i];
}
}
bool isOver60(int index){
return scores[index] >= 60;
}
};
int countPass(Dept dept){
int count = 0;
for(int i = 0; i < dept.getSize(); i++){
if(dept.isOver60(i))
count++;
}
return count;
}
int main()
{
Dept com(10);
com.read();
int n = countPass(com);
cout << "60์ ์ด์์ " << n << "๋ช
";
}
counterPassํจ์์์ ๊ฐ์ ์ํ ํธ์ถ๋ก ์์ ๋ณต์ฌ๊ฐ ์งํ๋์ด ๋ณต์ฌ์์ฑ์๊ฐ ์์ฑ๋๋ค. ์ด ๋ ํจ์๊ฐ ๋๋๋ฉด์ com๊ฐ์ฒด์ scores๊ฐ ๋ฐํ๋์๋๋ฐ
ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃํ๋ฉด์ ๋ค์ ํ๋ฒ ๋ ์๋ฉธ์๊ฐ ์คํ๋์ด socres๋ฅผ ๋ฐํํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ๋ฐ์
int countPass(Dept &dept){
int count = 0;
for(int i = 0; i < dept.getSize(); i++){
if(dept.isOver60(i))
count++;
}
return count;
}