20141029 (C++ ()연산자와 Functor(펑터), ARM SAM-BA)

168일차




--------

C++

--------



------- 연산자 ()와 Functor(펑터)


객체를 함수처럼 사용하는 것을 말한다.

다음 예제로 확인


예제)

#include <iostream>


using namespace std;


class Point

{

private:

int xpos;

int ypos;


public:

Point(int x = 0, int y = 0) : xpos(x), ypos(y)

{ }


Point operator+(const Point& pos) const

{

return Point(xpos + pos.xpos, ypos + pos.ypos);

}


friend ostream& operator<<(ostream& os, const Point& pos);

};


ostream& operator<<(ostream& os, const Point& pos)

{

cout << "[" << pos.xpos << ", " << pos.ypos << "]" << endl;

return os;

}


class Adder

{

public:

int operator()(const int& n1, const int& n2)

{

return n1 + n2;

}


double operator()(const double& n1, const double& n2)

{

return n1 + n2;

}


Point operator()(const Point& n1, const Point& n2)

{

return n1 + n2;

}

};


int main()

{

Adder adder;


cout << adder(1, 3) << endl;

cout << adder(1.5, 1.7) << endl;

cout << adder(Point(3,4), Point(7, 7));


return 0;

}




객체를 함수처럼 사용하는 것을 Functor라고 부른다.

또 다른 예제


예제)

#include <iostream>


using namespace std;


class SortRule              // 추상 클래스

{

public:

virtual bool operator()(int num1, int num2) const = 0;        // 순수 가상함수

};


class AscendingSort : public SortRule

{

public:

bool operator()(int num1, int num2) const

{

if(num1 > num2)

return true;

else

return false;

}

};


class DescendingSort : public SortRule

{

public:

bool operator()(int num1, int num2) const

{

if(num1 < num2)

return true;

else

return false;

}

};


class DataStorage

{

private:

int * arr;

int idx;

const int MAX_LEN;


public:

DataStorage(int arrlen) : idx(0), MAX_LEN(arrlen)

{

arr = new int[MAX_LEN];

}


void AddData(int num)

{

if(MAX_LEN <= idx)

{

cout << "더 이상 저장이 불가능합니다." << endl;

return;

}

arr[idx++] = num;

}


void ShowAllData()

{

for(int i= 0; i < idx; ++i)

{

cout << arr[i] << " ";

}

cout << endl;

}


void SortData(const SortRule& functor)

{

for(int i = 0; i < (idx - 1); ++i)

{

for(int j = 0; j < (idx - 1); ++j)

{

if(functor(arr[j], arr[j+1]))

{

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

}

};


int main()

{

DataStorage storage(5);


storage.AddData(40);

storage.AddData(30);

storage.AddData(50);

storage.AddData(20);

storage.AddData(10);


storage.SortData(AscendingSort());

storage.ShowAllData();


storage.SortData(DescendingSort());

storage.ShowAllData();


return 0;

}

결과



이렇게 사용한다.




















-------------

ARM

-------------



------- SAM-BA


ARM에 프로그램을 올려줄 때 SAM-BA를 사용한다.

현재 실습용 장비인데,

항상 프로그램을 넣어주기 전에 TST를 켜고 POWER을 켜서

안에 프로그램을 지워주고, PC와 연결하여 프로그램을 넣었다.


그 구동 원리는


(Memory)


칩 내부에 SAM-BA 프로그램이 저장되어 있어,

TST를 켜면 SAM-BA 프로그램이 Flash에 저장되고,

Windows와 통신이 가능하게 되면서 프로그램을 넣을 수 있게 되는 것이었다.



설정

트랙백

댓글