الگوریتمستان

برنامه‌نویسی، طراحی الگوریتم و حل مسئله‌های الگوریتمی

 
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.
قالب‌ها در ++C - الگوریتمستان
الگوریتمستان
  »  

قالب‌ها در ++C

        آشنایی با قالب‌ها به عنوان یکی از امکانات متمایز ++C از C
آنچه می‌خوانید ویراست جدید نوشته‌ای است که اولین بار با عنوان «قالبها در ++C» خرداد ماه ۱۳۸۵ از طریق وبگاه برنامه‌نویسی و طراحی الگوریتم (عنوان و طرح پیشین وبگاه الگوریتمستان) منتشر شده بود.

یکی از امکانات جالب و مفید زبان ++C قالب‌ها (Templates) هستند که انعطاف زیادی به کدنویسی می‌دهند.

فرض کنید در یک برنامه نیاز به تعویض مقادیر دو متغیر هست. یعنی مثلا می‌خواهیم مقادیر a و b را با هم عوض کنیم. اگر a و b از نوع صحیح باشند، تابع جابجایی می‌تواند به این صورت باشد:

  

void swap(int &a, int &b){
  int temp;
  temp = a;
  a = b;
  b = temp;
}

  

حال اگر بخواهیم مقادیر دو تا متغیر اعشاری را عوض کنیم، تابع فوق به کار نمی‌آید و باید تابع جدیدی بنویسیم. اما اگر از قالب استفاده کنیم، همه‌ی مشکلات حل می‌شوند.

به قطعه کد زیر توجه کنید:

  

template< class T >
void swap(T &a, T &b){
  T Temp;
  Temp = a;
  a = b;
  b = Temp;
}

  

این کد روش استفاده از قالب را نشان می‌دهد. وقتی کامپایلر به این قطعه کد می‌رسد، متوجه می‌شود که یک تعریف کلی از یک تابع ارائه شده است. به جای T می‌توان در زمان فراخوانی تابع، هر نوع داده‌ی استاندارد، ساختمان یا کلاس استفاده کرد. به عنوان مثال:

  

int n = 5, m = 6;
double x = 0.12, y = 125.6;
char a = 'A', b = 'B';
swap(n, m);
swap(x, y);
swap(a, b);
cout << " n = " << n << ", m = " << m << endl;
cout << " x = " << x << ", y = " << y << endl;
cout << " a = " << a << ", b = " << b << endl;

  

خروجی:

  

n = 6, m = 5
x = 125.6, y = 0.12
a = B, b = A

  

به عبارت ساده‌تر، وقتی کامپایلر به کد

swap(n, m)

می‌رسد، متوجه می‌شود که باید T را int در نظر بگیرد و ...

همانطور که گفته شد، می‌توانید برای اشیاء کلاس‌ها و ساختمان‌ها هم از قالب استفاده کنید. اگر strval1 و strval2 دو متغیر از نوع ساختمان دلخواه باشند، عبارت

swap(strval1, strval2)

کاملا درست بوده و باعث جابجایی متغیرهای متناظر ساختمان‌ها می‌شود.

قالب‌ها از تمامی امکانات ++C نظیر سربارگزاری، تعریف مجدد و پارامترهای پیش‌فرض پشتیبانی می‌کند. مهم‌تر از همه این که می‌توان از قالب‌ها برای تعریف کلاس‌ها استفاده کرد:

  

template< class T >
class myclass{
  private:
    T a;
  public:
    myclass(T x){
      set_a(x);
    }
    T get_a(){
10       return a;
11     }
12     void set_a(T x){
13       a = x;
14     }
15 };

  

با توجه به تعریف فوق، برای مشخص کردن اشیاء می‌توان نوشت:

  

myclass<int> n(7);
myclass<float> d(10.5);

  

توجه داشته باشید که لازم نیست همه‌ی متغیرها از نوع کلی باشند. تابع زیر را در نظر بگیرید که یک آرایه و تعداد اعضای آن را دریافت کرده و این اعضا را چاپ می‌کند:

  

template< class T >
void print(T *arr, int n){
  int i;
  for (i = 0 ; i < n ; i ++)
    cout << *(arr + i) << endl;
}

  

در ضمن می‌توان به جای یک نوع کلی، از چند نوع استفاده کرد:

  

template< class type1, class type2, . . . , class typeN >

  

از کاربردهای دیگر قالب‌ها می‌توان به توابع مرتب‌سازی، توابع جستجو، پشته‌ها، لیست‌های پیوندی، درخت‌ها و صف‌ها اشاره کرد.

به اشتراک‌گذاری نوشته
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter     اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus
برچسب‌ها
امتیاز نوشته
  • 1
  • 2
  • 3
  • 4
  • 5

نام: *  

پست الکترونیک:

وبگاه:

متن پیام: *

01 02 03 04 05 06 07 08 09 10 11 12 13 14

 


• آنا
جمعه، ۲۲ آبان ماه ۱۳۸۸، ساعت ۱۲:۲۰

واقعا ازتون ممنونم.خسته نباشین

شنبه، ۲۳ آبان ماه ۱۳۸۸، ساعت ۱۸:۱۳
مسعود اقدسی‌فام

مرسی. من هم از لطف شما ممنونم.


• گلناز
سه‌شنبه، ۵ بهمن ماه ۱۳۸۹، ساعت ۱۹:۱۹

سلام یه مقاله کامل در مورد ساختار  template  در ++cسراغ ندارین؟یا آدرس سایت یا وبلاگی در همین رابطه؟با تشکر

جمعه، ۸ بهمن ماه ۱۳۸۹، ساعت ۱۵:۲۸
مسعود اقدسی‌فام

نه متاسفانه.


• مهدی م
جمعه، ۱۳ دی ماه ۱۳۹۲، ساعت ۱۶:۴۸

سلام

منظور از& ک درتابع استفاده کردید چیه--->(swap(&a,&b

دوشنبه، ۱۶ دی ماه ۱۳۹۲، ساعت ۱۶:۲۸
مسعود اقدسی‌فام

از این کاراکتر برای مشخص کردن متغیر مرجع در زمان تعریف متغیر استفاده می‌شه. در مورد متغیرهای مرجع مطلب جداگانه‌ای روی سایت هست.


• فاطمه سادات
شنبه، ۳۰ فروردین ماه ۱۳۹۳، ساعت ۱۱:۵۱

به نظرم خیلی ناقص بود..

به هر حال ممنون


• Arash
دوشنبه، ۲۰ مرداد ماه ۱۳۹۳، ساعت ۱۹:۰۵

سوال،،

چگونه میتوان از یک کلاس با خاصیت تمپلیت یک .ارایه از اشیایی ساخت که مثلا اگر آن آرایه دارای 3 اندیس باشد اندیس اولش از نوع بولن دومش از نوع اعشار و سومش از نوع عدد صحیح باشد؟

من خودم بلدم یک آرایه از یک کلاس تمپلیت تعریف کنم ولی فقط میتونم آرایه هایی رو تعریف کنم همه اشیا اون از یک نوع و یک جنس هستن.... مثلا یک آرایه با 10 اندیس که همه اون اندیس ها از نوع بولن هستن..... وقتی که میخوام هر اندیس نوع خودشو داشته باشه کامپایلر خطا میده که لیست آرگومان های کلاس تمپلیت ناقصه!!! بعد از یک ماه جستجو فهمیدم که باید برای همچین شرایطی برای لیست از یک استراکچر استفاده کرد.... اما چطور نمیدونم..... امیدوارم که راهی برای حل این مشکل باشه....


• یلدا
شنبه، ۱۹ اردیبهشت ماه ۱۳۹۴، ساعت ۱۰:۳۷

کوتاه و مختصر

عالی بود

0612


• ساسان
شنبه، ۱۵ اسفند ماه ۱۳۹۴، ساعت ۰۹:۲۱

واقعا ممنون واقعا ممنون

عالیه این سایت121212


جمعه، ۲۴ اردیبهشت ماه ۱۳۹۵، ساعت ۰۸:۴۵

ممنون

استفاده کردم


الگوریتمستان در تلگرام

   

   

پیوند کوتاه: عمر نوشته:  ۳۲۸۱ روز
تعداد بازدید:  ۳۰۷۸۸ بازدید
تعداد امتیاز:  ۳۰ امتیاز
میانگین امتیاز:  ۴.۳۳  از  ۵.۰۰
»  ظرف‌ها در ++C
        معرفی انواع ظرف‌ها (نگهدارنده‌ها - containers) در زبان برنامه‌نویسی ++C
»  فایل سرآیند algorithm
        معرفی فایل سرآیند algorithm از کتابخانه قالب استاندارد زبان برنامه‌نویسی ++C به همراه نمونه کد
»  کلاس‌های حافظه در ++C
        آشنایی با کلاس‌های حافظه و کاربرد آنها در زبان ++C
»  حلقه‌های تکرار در ++C
        آشنایی با حلقه‌های تکرار در زبان برنامه‌نویسی ++C و دستورات کنترلی مورد استفاده در آن
»  نکات مهم در برنامه‌نویسی به زبان ++C
        پنج نکته‌ی آموزنده در مورد برنامه‌نویسی به زبان برنامه‌نویسی ++C
»  توابع دوست کلاس در ++C
        آشنایی با توابع دوست کلاس در زبان برنامه‌نویسی ++C و کاربرد آنها در سربارگذاری عملگرها
»  سربارگذاری عملگرها در ++C
        آشنایی با مفهوم سربارگذاری عملگرها در زبان ++C
»  متغیرهای مرجع در ++C
        معرفی متغیرهای مرجع در زبان برنامه‌نویسی ++C و آشنایی با مهمترین کاربردهای آنها
»  آرایه پویای دو بعدی در ++C
        آموزش استفاده از آرایه‌ی پویای دو بعدی در زبان ++C
»  اشاره‌گرها در زبان ++C
        آشنایی با مفهوم و عملکرد اشاره‌گرها در زبان برنامه‌نویسی ++C و ارائه مثالهایی از کاربرد آن
»  آرایه‌ی ایستا و پویا در ++C
        آشنایی با آرایه‌ی پویای یک بعدی و کاربردهای آن در زبان برنامه‌نویسی ++C