#include <iostream>
using namespace std;
// 함수객체
// ()연산자를 재정의해서 함수처럼 동작하는 객체.
// 상태를 가지는 함수-> 함수 보다 훨씬 뛰어나다.
// 암시적인 inline을 갖는다.
// 함수보다 빠를 때가 있다. 일반 함수가 인자로 전달될 때 함수 포인터를 사용한다.
// (inline을쓰지못한다.pointer이기 때문에.)
// 아래와 같은 경우는 지속적인 값을 가지지못한다. 매번값을넘겨줘야한다.
int plus( int a, int b, int ba )
{
static int base = 0;
base = ba;
return a + b + base;
}
class plus
{
int base;
public:
plus( int a = 0 ) : base(a) {}
int operator()(int a, int b)
{
return a + b + base;
}
};
void main()
{
plus p(10);
int s = p( 1, 2 ); // p.operator()(1,2)
cout << s << endl;
}
// 컴파일러가만들어주는것들
{
int x, y;
public:
void* operator&()
{
return this;
}
const void* operator&() const
{
return this;
}
};
void main()
{
const Point p;
cout << &p << endl;;
// p.operator&() 주소연산자도재정의가능하지만안하니못하다.!!
}