#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 // int형 정수의 저장소
{
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)-i; 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;
}
1.빨간색 SortData 함수의 매개변수에서 매개변수의타입이 SortRule인데 SortRule 클래스는 추상클래스입니다.
객체생성이불가능한 추상클래스인데, 어떻게 매개변수로 가능한 것인가요? 매개변수는 변수 생성,객체의 생성과는 좀
다른 개념인가요?
2.main 함수의 빨간색 부분에서 storage객체로 SortData함수를 호출하는데, SortData함수는 보시다시피
매개변수로 SortRule 객체이고 이를 참조형으로 선언되고 있습니다.따라서 AscendingSort() << 이부분이 의미하는 것이
펑터이고 그에 따른 임시객체 생성인데 AscendingSort클래스를 보시면 아시다시피 ()연산자에서 인자로 int 형 매개변수를 두개로 전달 받기로 되어있습니다. 그런데 main 함수에서는 AscendingSort()에서 인자전달없이 딸랑 임시객체만 생성 되고있는데 되는 이유가 무엇인가요? SortData 함수의 매개변수가 const 변수이고 &로 선언되어서 상수값을 전달 받을 수 있기 떄문인가요? 그렇다면 Ascending 임시객체가 상수라는 말인가요?
댓글 0