View Full Version : تابع از نوع static در کلاس
suraty
پنج شنبه 19 آبان 1390, 16:25 عصر
سلام
مگه هر شی تابع عضو static را نباید تنها یکبار مقداردهی اولیه کند. اما در قطعه کد زیر تابع set که از نوع static است دو مرتبه توسط شی ob1 مقداردهی می شود. چرا؟
#include"iostream.h"
#include"conio.h"
class class1{
static int a,b;
public:
void static set(int i,int j){
a=i;
b=j;
}
void show(){
cout<<a<<b;
} };
int class1::a=100;
int class1::b=200;
int main(){
class1 ob1,ob2;
ob1.set(1,2);
ob1.show();
ob2.set(3,4);
ob2.show();
ob1.set(5,6);
ob1.show();
return 0;
}
developing
شنبه 21 آبان 1390, 12:37 عصر
با سلام
مقداردهي اوليه با مقداردهي فرق دارد. مقداردهي اوليه يعني در همان جايي كه متغير تعريف مي شود ولي مقداردهي در هر جاي ديگري را گويند.
در ضمن تابع ايستا با متغير ايستا زمين تا زير زمين فرق دارند.به سوال قبل خودت ارجاع مي دم:
متغير ايستا (http://barnamenevis.org/showthread.php?310054-%D8%AF%D8%A7%D9%87-%D9%87%D8%A7%DB%8C-static-%D9%88-%DA%A9%D9%84%D8%A7%D8%B3)
نكته ي بعدي در مورد توابع ايستا: اين نوع از توابع تنها براي كار كردن با متغيرهاي ايستا در زماني كه بخواهيم بدون ايجاد شي استفاده كنيمايجاد مي شوند.(چرا؟ چون متغيرهاي ايستا حتي زمانيكه شي اي از روي كلاس تعريف نشده باشد هم موجودند و توابع ايستا هم همينطور.)
نكته1: هر تابع بدون توجه به نوع آن(static, const, void, override, ...) مي تواند بينهايت بار فراخواني شود و اين مقداردهي اوليه نيست.
نكته2: هر بار كه به يك متغير در زمان تعريف آن مقدار مي دهيم به آن مقداردهي اوليه مي گويند و در بقيه ي موارد( هر جايي غير از مكان تعريف شدن متغير مقداردهي انجام دهيم) به آن مقداردهي مي گويند.
int a = 5;
a = 129;
خط اول مقداردهي اوليه مي باشد.
خط دوم مقداردهي است.
اصلا همه ي اينها رو ولش كن تعريف زير رو به جاي «متغيرهاي ايستا فقط يك بار مقداردهي اوليه مي پذيرند» به كار ببر.
خط تعريف متغيرهاي ايستا( هر چند به صورت متغرهاي محلي در يك تابع باشند) فقط يك بار انجام مي شود و يا به عبارت ديگر و بهتر متغيرهاي ايستا يك بار ايجاد مي شوند ولي در تمام طول برنامه حافظه ي تخصيص داده شده به آنها پس گرفته نمي شود.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.