صفحه اصلی

صفحه شخصی مسعود اقدسی‌فام
الگوریتمستان - آموخته‌های من از دنیای برنامه‌نویسی و طراحی الگوریتم
تعداد امتیازهای ثبت شده:  513

میانگین امتیازهای ثبت شده:  4.29 از 5.00
عبارت مورد نظر:

     

الگوریتمستان آموزش استفاده از آرایه پویای دو بعدی در زبان ++C

الگوریتمستان معرفی متغیرهای مرجع در زبان برنامه‌نویسی ++C و آشنایی با مهمترین کاربردهای آنها

الگوریتمستان بررسی مفهوم و روش پیاده‌سازی لیست پیوندی و توابع مرتبط آن به زبان برنامه‌نویسی ++C

الگوریتمستان آشنایی با صف اولویتی (Priority Queue)، کاربردها و نحوه پیاده‌سازی آن

الگوریتمستان آشنایی با الگوریتم استراسن برای محاسبه حاصلضرب ماتریس‌ها

الگوریتمستان آشنایی با درخت جستجوی دودویی (Binary Search Tree) و عملیات جستجو و درج و حذف گره

الگوریتمستان بحث در مورد مساله کاشی‌کاری یا فرش کردن زمین با موزاییک به روش تقسیم و حل

الگوریتمستان بررسی مساله برج هانوی و روش‌های حل بازگشتی و غیربازگشتی آن

الگوریتمستان بررسی روش‌های بسط لاپلاس، گاوس و فرمول تحویل، برای محاسبه دترمینان ماتریس مربعی، و پیچیدگی زمانی آنها

الگوریتمستان آشنایی با روش مرتب‌سازی سریع، همراه با قطعه‌کدهای نمونه به زبان برنامه‌نویسی ++C

الگوریتمستان آشنایی با روش مرتب‌سازی هرمی (Heap Sort)

الگوریتمستان پنج نکته آموزنده در مورد برنامه‌نویسی به زبان برنامه‌نویسی ++C


»   قالب‌ها در ++C شنبه، 9 خرداد ماه 1388، ساعت 13:15

مطلبی که می‌خوانید، ویراست دوم مطلبی است که نسخه اولیه آن با عنوان "قالبها در ++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( )

    {

      return a;

    }

    void set_a( T x )

    {

      a = x;

    }

};

 

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

 

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 >

 

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

‌چاپ مطلب
نسخه قابل چاپ مشاهده نسخه قابل چاپ و ارسال به چاپگر
به اشتراک گذاری مطلب
FriendFeed       Twitter       Facebook       Cloob
آمار
تعداد امتیازهای ثبت شده:  7 ،  میانگین امتیازهای ثبت شده:  4.00 از 5.00
‌برچسب‌ها
برنامه‌نویسی ++C
امتیاز مطلب
1 2 3 4 5
ارسال پیام
» آنا

جمعه، 22 آبان ماه 1388، ساعت 12:20
واقعا ازتون ممنونم.خسته نباشین

» مسعود اقدسی‌فام

شنبه، 23 آبان ماه 1388، ساعت 18:13
مرسی آنا جان. من هم از لطف شما ممنونم.

» گلناز

سه‌شنبه، 5 بهمن ماه 1389، ساعت 19:19
سلام یه مقاله کامل در مورد ساختار  template  در ++cسراغ ندارین؟یا آدرس سایت یا وبلاگی در همین رابطه؟با تشکر

» مسعود اقدسی‌فام

جمعه، 8 بهمن ماه 1389، ساعت 15:28
نه متاسفانه گلناز خانم.



دوست عزیزم، لطفا قبل از ارسال پیام به موارد زیر توجه داشته باشید:

1- تا حد ممکن از حروف فارسی برای نگارش پیام خود استفاده کنید. امکان ارسال پیام لاتین و کدهای برنامه‌نویسی با چیدمان چپ به راست نیز وجود دارد.
2- به درخواست پروژه‌های آماده و موارد مشابه پاسخ داده نخواهد شد.
3- از قرار دادن هرگونه نشانی یا شماره تماس در متن پیام خودداری کنید.
4- از ارسال پیام‌های تبلیغاتی خودداری کنید.
5- از ارسال سوال و پیام غیرمرتبط با مطلب ارائه شده خودداری کنید.
6- لطفا نظر خود را در مورد مطلب ارائه شده، با ثبت امتیاز مشخص نمایید.

پیشاپیش از همکاری شما سپاسگذارم.


نام:  
پست الکترونیک
وب‌سایت:
متن پیام: