PDA

View Full Version : سوال: header file و cpp - پیاده سازی کلاس ؟



Modifier
دوشنبه 13 خرداد 1387, 18:14 عصر
سلام علیکم

در ویژوال سی (++) وقتی کلاسی میسازیم 2 تا فایل میسازد یکی با پسوند h و دیگری cpp :

1 - این طور که معلومه اینترفیس کلاس در h و پیاده سازی آن cpp نوشته میشود. آیا این طور است ؟

2 - ایا در صورت درست بودن سوال بالا میتوان غیر از این عمل کرد ؟

3 - اگر سوال 1 درست است چرا در کلاس فرمی که ایجاد میکنیم این گونه نیست ؟ البته مشخصه که سازنده و مخرب بصورت inline پیاده سازی شده ولی چرا InitializeComponent در cpp پیاده ساری نشده ؟

ممنون

موفق باشید.

یا علی

Nima_NF
سه شنبه 14 خرداد 1387, 00:27 صبح
1- بله معمولا همین طور هست که قالب کلاس و متدهایی که قرار هست به صورت inline تعریف شوند در فایل .h ذخیره می شوند.

2- بله ، شما می توانید فایل .h را پاک کنید و کلاس را در بالای فایل cpp. به همان صورت تعریف کنید.

3- در کلاس دیالوگ ها هم به همین شکل هست و در دو فایل جداگانه ساخته می شود.

Modifier
سه شنبه 14 خرداد 1387, 13:50 عصر
سلام علیکم



2- بله ، شما می توانید فایل .h را پاک کنید و کلاس را در بالای فایل cpp. به همان صورت تعریف کنید.


اگر فایل .h رو پاک کنیم در صورتی که بخواهیم از این کلاس در کلاس دیگر استفاده کنیم در include چه چیز رو اضافه کنیم؟

Nima_NF
سه شنبه 14 خرداد 1387, 14:36 عصر
برای این کار دیگر فایل هدری وجود ندارد که include شود، شما باید در سایر فایل ها که می خواهید از آن کلاس استفاده کنید قالب کلاس را دوباره در بالای همان فایل تعریف کنید (البته با کلمه کلیدی extern) که به دلیل تکرار، حجم کد ها را بالا می برد.

هدف از هدر فایل ها همین هست که شما یک بار در فایل .h تعاریف را انجام دهید و به جای تکرار مجدد تعریف ها، فقط آن هد فایل را در فایل های دیگر include کنید.

Modifier
سه شنبه 14 خرداد 1387, 17:51 عصر
سلام علیکم

شاید بشه .cpp رو حذف کرد و کلاس و پیاده سازی آن رو در .h نوشت تا دیگه این مشکل هم پیش نیاد.
این طور نیست ؟

ممنون

موفق باشید.

یا علی

Nima_NF
سه شنبه 14 خرداد 1387, 20:29 عصر
فقط توابع inline باید در فایل .h تعریف شوند.
اگر پیاده سازی کلاس و توابع را در فایل .h انجام دهید به دلیل تکرار مراجعه به این فایل، خطا دریافت می کنید چرا که چندین مرتبه یک تابع تعریف خواهد شد.
این قانون برنامه نویسی ++C هست و باید از آن پیروی کنید،

ضمنا اگر سوالات شما در زمینه دات نت هست که موضوع کاملا متفاوت هست و دیگر همه چیز بر مبنای تغییرات مایکروسافت در زبان ++c شده است.

Modifier
چهارشنبه 15 خرداد 1387, 00:07 صبح
ضمنا اگر سوالات شما در زمینه دات نت هست که موضوع کاملا متفاوت هست و دیگر همه چیز بر مبنای تغییرات مایکروسافت در زبان ++c شده است.

بله همینطوره ؟

مگه مشکلی داره ؟

PC2st
پنج شنبه 16 خرداد 1387, 12:29 عصر
مگه مشکلی داره ؟نه مشکلی نداره :لبخندساده: ولی c++/cli و قسمت managed آن، بیشتر شبیه به c#.net و vb.net به نظر میرسه تا ++standard c.

Modifier
پنج شنبه 16 خرداد 1387, 12:46 عصر
نه مشکلی نداره :لبخندساده: ولی c++/cli و قسمت managed آن، بیشتر شبیه به c#.net و vb.net به نظر میرسه تا ++standard c.

با این توصیفات به نظر من مشکل دار شده.
چون استانداردی که جهانی شده و همه با اون کار میکنن چرا باید تغییر کنه.
با اینکه C++ مثل java کاملا OO نیست ولی با این کار ها چون میخوان برای کاربر کار ها راحتر باشه دیگه کم کم داره کله C++ رو زیر سوال میبرن.

هر زبانی رو بهر کاری ساختند... بخصوص C++.
....

یا علی

Nima_NF
پنج شنبه 16 خرداد 1387, 16:06 عصر
با این توصیفات به نظر من مشکل دار شده.
چون استانداردی که جهانی شده و همه با اون کار میکنن چرا باید تغییر کنه.
با اینکه C++ مثل java کاملا OO نیست ولی با این کار ها چون میخوان برای کاربر کار ها راحتر باشه دیگه کم کم داره کله C++ رو زیر سوال میبرن.

هر زبانی رو بهر کاری ساختند... بخصوص C++.

به خاطر همین هست که اکثریت برنامه نویسان از C++/CLI ناراضی هستند و برای کار دات نت دنبال #C و VB می روند و خود مایکروسافت هم این را تاکید کرده که توجهش در دات نت بر روی vb و #C هست. مایکروسافت هر سال تغییراتی بر زبان ++C به صورت غیر استاندارد می دهد و به نوعی آن را بی ثبات می کند تا بتواند با دات نت سازگار شود.
مثلا به جای ^ ابتدا از *gc__ استفاده می کرد و سپس از سال 2005 به بعد آن را با ^ جایگزین کرد و خیلی موارد مشابه. (به همین خاطر می گویند syntax های مایکروسافتی نه استاندارد)

پس اگر می خواهید C++/CLI کار کنید نباید کتاب ++C استاندارد را بخوانید، بلکه باید C++/CLI یا VC++.Net نسخه 2005 یا 2008 را مطالعه کنید.

در مورد برنامه نویسی native هم که با ++C استاندارد انجام می شود قبلا توضیح دادم. (این بخش همچنان استاندارد مانده و البته محبوب)