سلام . معمولا کلاسی که مجموعه ای از توابع یا کارکرد یک کلاس دیگه رو به ریخت و قیافه دیگه ( که معمولا واضحتر از قبلی هست ) ارائه بده یه کلاس Wrapper میگن . در واقع یک کلاس Wrapper همون کارکرد کلاس قبلی رو میده ولی یکم دردسرهاشو کم تر میکنه .
مثلا :
int fopen (const char* name,const char* mode);
int fclose (int file_handle);
class CFileEx
{
public:
enum FILE_MODE { FILE_MODE_READ = 0, FILE_MODE_WRITE , .... , ... };
static std::string OpenFile (const std::string& name,FILE_MODE mode)
{
switch(FILE_MODE)
{
case FILE_MODE_READ:
int r = fopen(name.c_str(),"r");
if(r == NULL) return std::string("Cant't open file");
break;
case FILE_MODE_WRITE:
int r = fopen(name.c_str(),"w");
if(r == NULL) return std::string("Cant't open file");
break;
case ....
}
}
static std::string CloseFile (............)
{
....
....
....
}
};
مثلا ما ۲ تا تابع اصلی داریم fopen و fclose که کار باز کردن و بستن فایل رو انجام میدن . ولی می میخوایم ۲ تا تابع درست کنیم که دقیقا کار همین ۲ تابع رو انجام بده ولی جای اینکه برای باز کردن فایل بصورت برای خوندن از "r" و براش نوشتن از "w" استفاده نشه و ما از روش خودمون استفاده کنیم و Error ها رو از عدد به رشته ای که برای انسان قابل خوندن هست تبدیل کنیم و هر کاری شبیه به همینا . این کلاسی که ما درست میکنیم همون کارکرد رو داره . در واقع OpenFile همون fopen و CloseFile هم همون fclose هست . فقط به شکل دیگه ای.
در ضمن Wrapper Class مبحث خاصی نیست و ویژگی خاص و ثابتی نداره برای تعریف . کاربردش بیشتر برای نظم دادن و قابل فهمتر کردن کد و کلاس ها هست که با اسمهای بهتر و دسته بندی های بهتر بشه از اون تابع استفاده کرد.