1. 값에 의한 전달
- 아래 코드를 통해 주소를 확인함으로써 변수명이 같아도 함수가 다르면 주소가 다름을 확인할 수 있다.
void doSomething(int y)
{
cout <<"int func " << y << " " << &y << endl;
}
int main()
{
doSomething(5);
int x = 6;
cout << "In main" << x << " " << &x << endl;
doSomething(x);
doSomething(x + 1);
return 0;
}
2. 참조에 의한 인수 전달
- 참조를 매개변수로 사용한 함수는 다른 곳에 썻을 때 주소가 남는다.
void addOne(int &y)
{
y = y + 1
}
int main()
{
int x = 5;
cout << x << " ' << &x << endl;
addOne(x);
cout << x << " " << &x << endl;
}
3. 주소에 의한 전달
- 외부에 있는 변수의 값을 집정 변경할 수 있다.
void foo(int *ptr)
{
cout << *ptr << " " << ptr << " " << &ptr << endl;
}
int main()
{
int value = 5;
cout << value << " " << &value << endl;
int *ptr = &value;
foo(value);
foo(&value);
return 0;
}
4. Tuple
- 서로 다른 타입의 값을 가질 수 있는 고정된 값의 컨테이너
std::tuple<int, double> getTuple()
{
int a = 10;
double d = 3.14;
return std::make tuple(a, d);
}
int main()
{
auto[a, d] = getTuple();
cout << a << endl;
cout << d << endl;
return 0;
}
5. 함수 오버로딩
int add(int x, int y)
{
return x + y;
}
double add(double x, double y)
{
return x + y;
}
int main()
{
add(1, 2);
add(3.0, 4.0);
}
int func()
{
reuturn 4;
}
int main()
{
cout << func << endl;
return 0;
}
6. vector new-delete 대체
int main()
{
std::vector<int> v {1, 2, 3};
v.reserve(1024);
for(unsigned int i = 0; i < v.size(); ++i)
cout << v[i] << " ";
cout << endl;
cout << v.size() << " " << v.capacity() << endl;
int *ptr = v.data();
cout << ptr[2] << endl;
7. stack
void printStack(const std::vector<int> &stack)
{
for (auto &e : stack)
cout << e << " ";
cout << endl;
}
int main()
{
std::vector<int> stack;
stack.push_back(3);
printStack(stack);
stack.push_back(5);
printStack(stack);
stack.push_back(7);
printStack(stack);
stack.pop_back();
printStack(stack);
stack.pop_back();
printStack(stack);
stack.pop_back();
printStack(stack);
}
8. 재귀적 함수
void countDown(int count)
{
cout << count << endl;
if(count > 0)
countDown(count - 1);
}
int main()
{
countDown(5);
9. assert 단언하기(dubug 모드에서만 작동됨)
#include <cassert>
#include <array>
void printValue(const std::array<int, 5> &my_array, const int& ix)
{
assert(ix >= 0);
assert(ix <= my_array.size() - 1);
std:: cout << my_array[ix] << std::endl;
}
int main()
{
std::array<int, 5> my_array{1, 2, 3, 4, 5}
printValue(my_array, 100)
return 0;
}
10. Ellipsis
double findAverage(int count, ...)
{
double sum = 0;
va_list list:
va_start(list, count);
for(int arg = 0; arg < count; ++arg)
sum += va_arg(list,int);
va_end(list);
return sum / count;
}
int main()
{
cout << findAverage(1, 1, 2, 3, "Hello", "c") << endl;
cout << findAverage( 3, 1, 4, 5) << endl;
cout << findAverage(5, 4, ,5, 3, ,2, 4) << endl;
cout << findAverage(10, 1, 3, 4, 5, 3) << endl;
return 0;
}