آگوست 25, 2019 Mostafa بدون دیدگاه

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

هر یک از اعضای کلاس، چه اعضای داده ای و چه توابع عضو، میتوانند بصورت static تعریف شوند.

اعضای داده ای استاتیک کلاسها در سی پلاس پلاس :

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

وقتی یک عضو داده ای static را در داخل کلاسی اعلان میکنید، حافظه به آن اختصاص نمی یابد. در عوض باید در خارج از کلاس، آن را بصورت عمومی تعریف کنید. این کار با تعریف مجدد متغیر static و با استفاده از عملگر تعیین کننده حوزه (::) برای شناسایی کلاسی که آن متغیر به آن کلاس تعلق دارد، انجام میشود. به این ترتیب حافظه به متغیر اختصاص می یابد.

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

توابع عضو استاتیک:

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

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

مثال :

    #include <iostream>  
    using namespace std;  
    class Account {  
       public:  
           int accno; //data member (also instance variable)      
           string name;   
           static int count;     
           Account(int accno, string name)   
            {    
                 this->accno = accno;    
                this->name = name;    
                count++;  
            }    
           void display()    
            {    
                cout<<accno<<" "<<name<<endl;   
            }    
    };  
    int Account::count=0;  
    int main(void) {  
        Account a1 =Account(201, "Sanjay"); //creating an object of Account  
        Account a2=Account(202, "Nakul");   
         Account a3=Account(203, "Ranjana");  
        a1.display();    
        a2.display();    
        a3.display();    
        cout<<"Total Objects are: "<<Account::count;  
        return 0;  
    }  

خروجی :
۲۰۱ Sanjay
۲۰۲ Nakul
۲۰۳ Ranjana
Total Objects are: 3

 


نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.