دنیای برنامه نویسی و اپلیکیشن

baner-telegram
شما اینجا هستید : صفحه اول » آموزش برنامه نویسی » آموزش ++C » فیلم آموزش برنامه نویسی C++ : کلاس های حافظه
فیلم آموزش برنامه نویسی C++ : کلاس های حافظه

فیلم آموزش برنامه نویسی C++ : کلاس های حافظه

در این قسمت از آموزش برنامه نویسی C++ در مورد کلاس های حافظه آموزش داده شده است که مبحث مهمی برای نحوه استفاده از متغیر ها در برنامه است .

کلاس حافظه ( Storage Classes ) :

کلاس حافظه در برنامه نویسی c++ یک ویژگی از متغیر است که حوزه متغیر و طول عمر متغیر را مشخص می کند .

حوزه متغیر یعنی یک متغیر در چه جاهایی قابل استفاده است .

طول عمر یعنی مدت زمانی که متغیر در حافظه وجود دارد ، به زبان ساده متغیر کی به وجود میاد و کی از بین می رود .

در زبان برنامه نویسی C++ از کلاس های حافظه ای گوناگونی برای تعریف متغیر استفاده می شود :

سینتکس کلاس های حافظه

 نام متغیر    نوع متغیر   کلاس حافظه  ;

auto  int  number ;

کلاس حافظه اتوماتیک ( auto ) :

تمام متغیرهای عادی که می نویسید از نوع کلاس auto هستند و دیگه لازم نیست که اول هر متغیر از کلمه auto استفاده کنیم خواستید بر این موضوع تاکید کنید می توانید این کلمه را بنویسید مثلاً دوتا عبارت زیر مثل هم هستند :

int number ;
auto int number ;

متغیر هایی که از نوع کلاس حافظه اتوماتیک هستند با فراخوانی تابع به وجود می آیند و تمام شدن تابع به صورت خودکار از بین می روند .

کلاس حافظه ثبات ( register ) :

این نوع از کلاس حافظه به کامپایلر پیشنهاد می دهد که متغیر رو بجای RAM در ثبات پردازنده ( CPU ) قرار بده .
به این نکته توجه کنید ، این یک پیشنهاد است و اگر ثبات خالی نداشته باشیم این کار انجام نمی شود . از این نوع کلاس حافظه بیش تر برای شمارنده حلقه استفاده می شود چون سرعت خواندن و نوشتن آن زیاد است :

register float sum;

کلاس حافظه استاتیک ( static )

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

#include <iostream>
#include <conio.h>

using namespace std;

void number();

int main()
{

    register int i;

    for( i =0 ; i< 5 ; i++){

        number();
    }

    getch();
    return 0;
}
void number(){

    int x =0;
    static int test = 0;
    cout<<"\n automatic X = "<<x<<"   ,  Static test = "<<test;
    x ++;
    test ++;
}

اگر کد های بالا را اجرا کنید می بینید که مقدار متغیر در هر بار صفر است ولی مقدار متغیر test از صفر تا 4 است دلیل این موضوع این است که چون نوع کلاس حافظه متغیر test از نوع استاتیک است و در زمان خروج ار تابع مقدار خودش رو حفظ می کند و دوباره که تابع بازمی گردد دیگه مقدار اولیه صفر را در نظر نمیگیره .

نکته مهم : نکته مهمی که باید در مورد متغیر های کلاس حافظه استاتیک بدونید این است که اگر با یک دستور جداگانه به متغیر مقدار بدید این یک خطای منطقی است :

#include <iostream>
#include <conio.h>

using namespace std;
void number();
int main()
{

    register int i;

    for( i =0 ; i< 5 ; i++){

        number();
    }

    getch();
    return 0;
}
void number(){

    int x =0;
    static int test;

    // مقدار دهی جداگانه
    test = 0;

    cout<<"\n automatic X = "<<x<<"   ,  Static test = "<<test;
    x ++;
    test ++;
}

حالا اگه کد بالارو اجرا کنید خواهید دید که مقدار test هم برابر صفر خواهد شد ، در این کد فقط به متغیر test جداگانه مقدار دادیم .

کلاس حافظه خارجی ( extern )

با استفاده از این نوع کلاس حافظه می تونید اگه دوتا فایل جداگانه برای برنامه داشتید می تونید با استفاده از کلمه extern از متغیر موجود در فایل یک در فایل دوم هم از اون استفاده کنید :

File 1: 
int number ; 


File 2 : 
extern int number;
cout<< number;

فیلم آموزش برنامه نویسی C++ را می توانید از لینک زیر دانلود کنید .

پیشنهاد می کنیم حتما بخوانید :

درباره : رضا طوماری

نظرات کاربران :


  1. پیمان گفت:

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

    • رضا طوماری گفت:

      با سلام
      تشکر بابت پیام دلگرم کننده شما ، حتما در قسمت های بعدی تمرین هم آماده می کنم .

جواب سوال چیه ؟ *