PDA

View Full Version : سوال: مقدار دهی اعضای استاتیک داخل کلاس



GENERAL IRAJ
جمعه 10 خرداد 1392, 23:31 عصر
با عرض سلام ، توی کتاب خوندم که اعضای استاتیک رو می شه داخل کلاس مقداردهی کرد
ولی... موقع مقدار دهی فقط نوع استاتیک LONGو INT قابلیت مقداردهی دارند
مثلاً در کد زیر:


class os
{
public:
os();
void set();
static int x=0;
static float z=0;
private:
int num;
float den;
};


در خط هفتم متغیر نوع float با خطای زیر مواجه می شود:(چرا):متفکر:

cannot intialiaze a class member here
تذکر : این کد در محیط ++borlandc نوشته شده است

rezaricky
شنبه 11 خرداد 1392, 10:58 صبح
سلام
امکان مقدار دهی اعضای static داخل کلاس وجود ندارد
باید اینطوری بنویسی :
class os {
public :
static int x ;
static float z ;
};

int os::x =0 ;
float os::z = 0;

قانون کلی درباره اعضای static : اعضای static باید در داخل کلاس اعلان (declare) شده و در خارج از کلاس تعریف شوند (define).

مصطفی ساتکی
شنبه 11 خرداد 1392, 19:06 عصر
بتوی کتاب خوندم که اعضای استاتیک رو می شه داخل کلاس مقداردهی کرد

شما فقط static const را می تونید استفاده کنید که داخل تعریف کلاس یکبار براش مقدار معرفی می کنید.

D_felfelak
شنبه 18 خرداد 1392, 13:23 عصر
شما فقط static const را می تونید استفاده کنید که داخل تعریف کلاس یکبار براش مقدار معرفی می کنید.

الا" تو ویژوال نوشتم اعلان کلاس بخش پرایوت:
static const int a = 2;
این رو error نمیده
اما وقتی میخوام ارایه ی کانست و استاتیک تعریف کنم و داخل کلاس بخش پرایوت مقداردهی کنم خطا میده و نمیزاره برنامه اجرا بشه:
; {static const int a[2] = {2 , 3


یه سوال دیگه :
چرا مجاز به تعریف کردن تابعی که هم استاتیک و هم کانست باشه نیستیم؟

مصطفی ساتکی
شنبه 18 خرداد 1392, 18:42 عصر
اما وقتی میخوام ارایه ی کانست و استاتیک تعریف کنم و داخل کلاس بخش پرایوت مقداردهی کنم خطا میده و نمیزاره برنامه اجرا بشه:
; {static const int a[2] = {2 , 3

آرایه را به تو header تعریف کنید
static const int a[2]

و در فایل سورس مقدار دهی کنید.
const int test1::a[2] ={1,2};


یه سوال دیگه :
چرا مجاز به تعریف کردن تابعی که هم استاتیک و هم کانست باشه نیستیم؟

توابع ثابت به این خاطر هستش که تابع موردنظر قادر به تغییر فیلدهای نمونه ایجاد شده نباشه یعنی فیلدی از this را نمی تونید تغییر بدید و به همین خاطر استفاده از static و const با هم بی معنا هستش چون در توابع static از نمونه کلاس و یا همان this استفاده نمی شه.

D_felfelak
شنبه 18 خرداد 1392, 21:28 عصر
با سپاس از پاسخگوییتون یه سوال دیگه:
مثلا ما یه ارایه ی 3 در 3استاتیک تعریف کرده ا غیر از اینکه با روش زیر مقداردهی کنیم راه دیگه ای هست که راحت تر مقدار اولیه بدیم؟
static int test1::a[3][3] = { 1 ,2 3, 4 ,5 , 6 , 7 , 8 , 9};

D_felfelak
شنبه 01 تیر 1392, 17:28 عصر
با سپاس از پاسخگوییتون یه سوال دیگه:
مثلا ما یه ارایه ی 3 در 3استاتیک تعریف کرده ا غیر از اینکه با روش زیر مقداردهی کنیم راه دیگه ای هست که راحت تر مقدار اولیه بدیم؟
static int test1::a[3][3] = { 1 ,2 3, 4 ,5 , 6 , 7 , 8 , 9};
و من همچنان منتظر پاسخ هستم
يه سؤال ديگه:
متغير پرايوت کانست و استاتيک رو غير از اينکه در هدر مقدار دهی کنی چه روش ديگه برای مقدار دهيش وجود داره؟
ميخوام در شروع اجرا، برنامه بياد و مقادير متغير های کانست و استاتيک رو از کاربر بگيره و روشون اعتبار سنجی هم انجام بدم
الا امدم از يه يک تابع که در ابتدای کار در مين صدا زده ميشه استفاده کردم اما اين طوری درست کار کردن برنامه منوط به اين هست که کاربر مين اين تابع رو در شروع صدا بزنه!!