بستن پنجره
فرادرس - مجموعه آموزش‌های ویدئویی  مهندسی کامپیوتر - طراحی الگوریتم - ساختمان داده
بستن پنجره     از آخرین نوشته‌ها

»    مسابقه‌ی برنامه‌نویسی آنلاین 20 Quera

»    دوره‌ی طراحی و تحلیل الگوریتم دانشگاه استنفورد

»    مسأله‌ی انتخابات

بستن پنجره
وبگاه
این صفحه
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter
اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus
بستن پنجره
وبگاه     این صفحه
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter     اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus
قالب‌ها در ++C - الگوریتمستان
الگوریتمستان
2814.395.00
  »  

       

آشنایی با قالب‌ها به عنوان یکی از امکانات متمایز ++C از C

http://www.aachp.ir آنچه می‌خوانید ویراست جدید نوشته‌ای است که اولین بار با عنوان «قالبها در ++C» خرداد ماه 1385 از طریق وبگاه برنامه‌نویسی و طراحی الگوریتم (عنوان و طرح پیشین وبگاه الگوریتمستان) منتشر شده بود.


یکی از امکانات جالب و مفید زبان ++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 >

  

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


نوشته‌های مرتبط
        معرفی انواع ظرف‌ها (نگهدارنده‌ها - containers) در زبان برنامه‌نویسی ++C
        آشنایی با توابع دوست کلاس در زبان برنامه‌نویسی ++C و کاربرد آنها در سربارگذاری عملگرها
        معرفی فایل سرآیند algorithm از کتابخانه قالب استاندارد زبان برنامه‌نویسی ++C به همراه نمونه کد
        آشنایی با مفهوم سربارگذاری عملگرها در زبان ++C
        آشنایی با کلاس‌های حافظه و کاربرد آنها در زبان ++C
        معرفی متغیرهای مرجع در زبان برنامه‌نویسی ++C و آشنایی با مهمترین کاربردهای آنها
        آشنایی با حلقه‌های تکرار در زبان برنامه‌نویسی ++C و دستورات کنترلی مورد استفاده در آن
        آموزش استفاده از آرایه‌ی پویای دو بعدی در زبان ++C
        پنج نکته‌ی آموزنده در مورد برنامه‌نویسی به زبان برنامه‌نویسی ++C
        آشنایی با مفهوم و عملکرد اشاره‌گرها در زبان برنامه‌نویسی ++C و ارائه مثالهایی از کاربرد آن
پیوند کوتاه صفحه دسته‌بندی
امتیاز نوشته
  • 1
  • 2
  • 3
  • 4
  • 5
ارسال پیام

نام: *  

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

وبگاه:

متن پیام: *

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

 


» سیدرضا بازیار

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

» ساسان

شنبه، ۱۵ اسفند ماه ۱۳۹۴، ساعت ۰۹:۲۱
واقعا ممنون واقعا ممنون
عالیه این سایت121212

» یلدا

شنبه، ۱۹ اردیبهشت ماه ۱۳۹۴، ساعت ۱۰:۳۷
کوتاه و مختصر
عالی بود
0612

» Arash

دوشنبه، ۲۰ مرداد ماه ۱۳۹۳، ساعت ۱۹:۰۵
سوال،،
چگونه میتوان از یک کلاس با خاصیت تمپلیت یک .ارایه از اشیایی ساخت که مثلا اگر آن آرایه دارای 3 اندیس باشد اندیس اولش از نوع بولن دومش از نوع اعشار و سومش از نوع عدد صحیح باشد؟
من خودم بلدم یک آرایه از یک کلاس تمپلیت تعریف کنم ولی فقط میتونم آرایه هایی رو تعریف کنم همه اشیا اون از یک نوع و یک جنس هستن.... مثلا یک آرایه با 10 اندیس که همه اون اندیس ها از نوع بولن هستن..... وقتی که میخوام هر اندیس نوع خودشو داشته باشه کامپایلر خطا میده که لیست آرگومان های کلاس تمپلیت ناقصه!!! بعد از یک ماه جستجو فهمیدم که باید برای همچین شرایطی برای لیست از یک استراکچر استفاده کرد.... اما چطور نمیدونم..... امیدوارم که راهی برای حل این مشکل باشه....

» فاطمه سادات

شنبه، ۳۰ فروردین ماه ۱۳۹۳، ساعت ۱۱:۵۱
به نظرم خیلی ناقص بود..
به هر حال ممنون

» مهدی م

جمعه، ۱۳ دی ماه ۱۳۹۲، ساعت ۱۶:۴۸
سلام
منظور از& ک درتابع استفاده کردید چیه--->(swap(&a,&b


دوشنبه، ۱۶ دی ماه ۱۳۹۲، ساعت ۱۶:۲۸
مسعود:
از این کاراکتر برای مشخص کردن متغیر مرجع در زمان تعریف متغیر استفاده می‌شه. در مورد متغیرهای مرجع مطلب جداگانه‌ای روی سایت هست.

» گلناز

سه‌شنبه، ۵ بهمن ماه ۱۳۸۹، ساعت ۱۹:۱۹
سلام یه مقاله کامل در مورد ساختار  template  در ++cسراغ ندارین؟یا آدرس سایت یا وبلاگی در همین رابطه؟با تشکر


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

» آنا

جمعه، ۲۲ آبان ماه ۱۳۸۸، ساعت ۱۲:۲۰
واقعا ازتون ممنونم.خسته نباشین


شنبه، ۲۳ آبان ماه ۱۳۸۸، ساعت ۱۸:۱۳
مسعود:
مرسی. من هم از لطف شما ممنونم.