با استفاده از کلیدواژه static میتوان اعضای یک کلاس را به صورت ایستا (استاتیک) تعریف کرد. تعریف یک عضو کلاس به صورت استاتیک بدین معناست که بدون توجه به تعداد اشیا ساخته شده از کلاس، تنها یک کپی از عضو استاتیک وجود خواهد داشت.
یک عضو استاتیک بین همه اشیا یک کلاس به اشتراک گذاشته خواهد شد. اگر دادههای استاتیک صریحاً مقداردهی اولیه نشوند، هنگام ساخت اولین شی، به صفر مقداردهی اولیه میشوند. مقداردهی اولیه را نمیتوان درون تعریف تابع قرار داد اما همانند مثال زیر، میتوان مقداردهی اولیه را خارج از کلاس و با اعلان مجدد متغیر استاتیک انجام داد. در این صورت از عملگر وضوح دامنه «::» برای مشخص کردن کلاسی که متغیر به آن تعلق دارد استفاده میشود.
مثال زیر را برای درک بهتر مفهوم دادههای استاتیک مشاهده کنید.
#include <iostream> using namespace std; class Box { public: static int objectCount; // Constructor definition Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout <<"Constructor called." << endl; length = l; breadth = b; height = h; // Increase every time object is created objectCount++; } double Volume() { return length * breadth * height; } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; // Initialize static member of class Box int Box::objectCount = 0; int main(void) { Box Box1(3.3, 1.2, 1.5); // Declare box1 Box Box2(8.5, 6.0, 2.0); // Declare box2 // Print total number of objects. cout << "Total objects: " << Box::objectCount << endl; return 0; }
خروجی این کد به صورت زیر خواهد بود.
Constructor called. Constructor called. Total objects: 2
توابع عضو استاتیک
با اعلان یک تابع عضو به صورت استاتیک، آن را مستقل از اشیا کلاس خواهید کرد. یک تابع عضو استاتیک را میتوان بدون وجود هیچ شیای از کلاس فراخوانی کرد. با استفاده از نام کلاس و عملگر وضوح دامنه «::» میتوان به توابع استاتیک دسترسی یافت.
یک تابع عضو استاتیک تنها قابلیت دسترسی به داده های عضو استاتیک، دیگر توابع عضو استاتیک و توابع خارج از کلاس را خواهند داشت.
توابع استاتیک دامنه مشابه دامنه کلاس دارند و به اشارهگر this کلاس دسترسی ندارند. برای تعیین اینکه تاکنون شیای از کلاس ساخته شده است یا نه، میتوان از توابع استاتیک بهره برد.
با مثال زیر مفهوم توابع عضو استاتیک را بهتر درک خواهیم کرد.
#include <iostream> using namespace std; class Box { public: static int objectCount; // Constructor definition Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout <<"Constructor called." << endl; length = l; breadth = b; height = h; // Increase every time object is created objectCount++; } double Volume() { return length * breadth * height; } static int getCount() { return objectCount; } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; // Initialize static member of class Box int Box::objectCount = 0; int main(void) { // Print total number of objects before creating object. cout << "Inital Stage Count: " << Box::getCount() << endl; Box Box1(3.3, 1.2, 1.5); // Declare box1 Box Box2(8.5, 6.0, 2.0); // Declare box2 // Print total number of objects after creating object. cout << "Final Stage Count: " << Box::getCount() << endl; return 0; }
با اجرای کد فوق، خروجی زیر حاصل میشود.
Inital Stage Count: 0 Constructor called. Constructor called. Final Stage Count: 2
منبع: ترجمه از سایت tutorialspoint.com
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.