declaration صرف چند کلاس در یک فایل هدر
کدی به زبان C++ میخونم که در هدر خیلی از فایلهاش یک کلاس رو به صورت کامل تشریح کرده (متدها وفیلدهاش) ولی بالاترش اومده چند تا کلاس دیگه هم تعریف کرده به این صورت:
class classA;
class classB;
class classC : public classD
{
public:
...
میخواستم بدونم علت اینکار چیه و چه امکانی رو به ما میده. یه جورایی این کلاس ها به نظر میاد به هم مرتبط هستن ولی رابطه parent-child با هم ندارن لزوما.
خیلی از سوالاتمو تونستم سرچ کنم، ولی این مورد هر چی سرچ میکردم تعریف چند کلاس در یک کلاس رو میگفت. اما این کلاس ها در حالی فقط تعریف شدن که در فایل های جداگانه وجود دارن و تشریح شدن
نقل قول: declaration صرف چند کلاس در یک فایل هدر
این مورد میگه شما از اطلاعات داخل اون کلاسهای بالا میخواهید در کلاس فعلی استفاده کنید. چیزی مثل include
نقل قول: declaration صرف چند کلاس در یک فایل هدر
نقل قول:
نوشته شده توسط
parvizwpf
این مورد میگه شما از اطلاعات داخل اون کلاسهای بالا میخواهید در کلاس فعلی استفاده کنید. چیزی مثل include
ممنون، همین راهنمایی شما باعث شد بتونم سرچ کنم و گویا بهش میگن forward-declaration.
خیلیا گفتن forward-declaration از include بهتره ولی چیزی که من میبینم تعدادی include هست و تعدادی forward-declaration در یک فایل هدر (همشون هم کلاس هستن). پس لزوما یه تفاوتی باید باشه. یه لینک هم تو همین انجمن پیدا کردم https://barnamenevis.org/showthread.php?493157
هر چند بازم خوب خوب نفهمیدم. به هر حال ممنون از راهنماییتون
نقل قول: declaration صرف چند کلاس در یک فایل هدر
نقل قول:
نوشته شده توسط
vahid-p
کدی به زبان C++ میخونم که در هدر خیلی از فایلهاش یک کلاس رو به صورت کامل تشریح کرده (متدها وفیلدهاش) ولی بالاترش اومده چند تا کلاس دیگه هم تعریف کرده به این صورت:
class classA;
class classB;
class classC : public classD
{
public:
...
میخواستم بدونم علت اینکار چیه و چه امکانی رو به ما میده. یه جورایی این کلاس ها به نظر میاد به هم مرتبط هستن ولی رابطه parent-child با هم ندارن لزوما.
خیلی از سوالاتمو تونستم سرچ کنم، ولی این مورد هر چی سرچ میکردم تعریف چند کلاس در یک کلاس رو میگفت. اما این کلاس ها در حالی فقط تعریف شدن که در فایل های جداگانه وجود دارن و تشریح شدن
با سلام خدمت دوست عزیزم آقا vahid البته شما استاد ما هستی جسارت نباشه!
اگر بخوام کلی بگم در زبان ++c شما می تونید قبل از استفاده از یک تابع prototype اون بنویسید و بعد در زمان مناسب اون تابع را تکمیل کنیم حالا تصور کنید می خواهید از یک کلاس یا از چندین کلاس با فضای نام های مناسب تو کلاسی که در حال نوشتن اون هستید بخواهید استفاده کنید ولی کلاس هایی که میخواهید استفاده کنید فقط در طراحی اولیه هستند مثلا در نمودار های uml برنامه تون هنوز اون را طراحی نکردید پس وجود خارجی ندارن و قاعدتا نمیتونید اون کلاس را include کنید حالا برای اینکه قبل از اینکه بتونید از اون استفاده کنید باید prototype کلاس را تعریف کنید و ازش استفاده کنید تا بعد کلاس را طراحی کنید و البته کاهش سرعت کامپایل هم هست که خودتون مطالب را قبلا مطالعه کردید ولی من خودم به شخصه تاثیری ندیدم بیشتر برای راحتی رابط ها و پیاده سازی کلاسها از این تکنیک استفاده میکنم..
نقل قول: declaration صرف چند کلاس در یک فایل هدر
نقل قول:
نوشته شده توسط
farhad_shiri_ex
با سلام خدمت دوست عزیزم آقا vahid البته شما استاد ما هستی جسارت نباشه!
اگر بخوام کلی بگم در زبان ++c شما می تونید قبل از استفاده از یک تابع prototype اون بنویسید و بعد در زمان مناسب اون تابع را تکمیل کنیم حالا تصور کنید می خواهید از یک کلاس یا از چندین کلاس با فضای نام های مناسب تو کلاسی که در حال نوشتن اون هستید بخواهید استفاده کنید ولی کلاس هایی که میخواهید استفاده کنید فقط در طراحی اولیه هستند مثلا در نمودار های uml برنامه تون هنوز اون را طراحی نکردید پس وجود خارجی ندارن و قاعدتا نمیتونید اون کلاس را include کنید حالا برای اینکه قبل از اینکه بتونید از اون استفاده کنید باید prototype کلاس را تعریف کنید و ازش استفاده کنید تا بعد کلاس را طراحی کنید و البته کاهش سرعت کامپایل هم هست که خودتون مطالب را قبلا مطالعه کردید ولی من خودم به شخصه تاثیری ندیدم بیشتر برای راحتی رابط ها و پیاده سازی کلاسها از این تکنیک استفاده میکنم..
پس منظور شما اینه که ما میتونیم از متدها و فیلدهای تعریف شده در هدر این کلاس استفاده کنیم (اگر حتی هدر این کلاس هم نباشه از خود کلاس فقط میشه استفاده کرد) با اینکه این متدها هنوز هیچ بدنه ای ندارن. شبیه اینترفیس میشه با این تفاوت که میتونیم آبجکت جدید ازش بسازیم بدون پیاده سازی.
نقل قول: declaration صرف چند کلاس در یک فایل هدر
نقل قول:
نوشته شده توسط
vahid-p
پس منظور شما اینه که ما میتونیم از متدها و فیلدهای تعریف شده در هدر این کلاس استفاده کنیم (اگر حتی هدر این کلاس هم نباشه از خود کلاس فقط میشه استفاده کرد) با اینکه این متدها هنوز هیچ بدنه ای ندارن. شبیه اینترفیس میشه با این تفاوت که میتونیم آبجکت جدید ازش بسازیم بدون پیاده سازی.
وقتی تو یک کلاس بخواهید متد دوست تعریف کنید و در اعلان تابع دوست یکی از آرگومان ها یک کلاس دیگه باشه از این روش استفاده میشه کرد.
#include <iostream>
using namespace std ;
class B ;
class A {
private :
int data;
public :
A() : data(4) { }
int friend ffunc(A , B);
};
class B {
private :
int data;
public :
B() : data(7) { }
int friend ffunc(A , B);
};
int ffunc(A a ,B b){
retrun(a.data + b.data);
};
و خوب حالا قبل از اینکه تابع دوست را پیاده سازی کنید باید کلاس B را پیاده سازی کنید حالا شاید بگید که خوب قبلش میام کلاس B را تعریف میکنم و بعد تو کلاس A فراخوانی میکنم بله درسته !
ولی این تکنیک زمانی کاربری داره که شما چند کلاس را تو یک فایل سورس سازماندهی میکنید. خوب باالطبع در این وضعیت فرقی نداره که اول کلاس A تعریف بشه ویا کلاس B چون در هر صورت باید قبل از استفاده هرکدوم از کلاسها اول تعریف بشن.