ورود

View Full Version : کلاس نویسی در ++C



hi level hdd
یک شنبه 19 دی 1389, 10:13 صبح
با سلام
من یه کلاس می خوام در سی پلاس طراحی کنم که از یه کلاس دیگه ارث ببره .ولی به یه مشکلی برخوردم

public ref class MyClass : public TestClass
}
{

مشکلم اینه که اگه کلمه ref رو بذارم از کلاس ارث برده شده ایراد میگیره چون به صورت typedef در سی پلاس طراحی شده. ولی اگه کلمه ref رو نذارم در استفاده از کلاس نمیتوان MyClass را در فایل دیگری مشاهده کرد لطفا کمک کنید با تشکر

Hadirj
یک شنبه 19 دی 1389, 12:28 عصر
اینطوری که شما نوشتید جز یه ; آخر کلاس چیزی کم نداره اگر اررور کامپایلر رو بزارید بهتر میشه مشکل رو متوجه شد




public ref class Parent
{
public:
int t1;
double t2;
};

public ref class Child : public Parent
{
};

hi level hdd
یک شنبه 19 دی 1389, 23:24 عصر
با سلام خدمت شما
من می خواهم از کلاس یا ساختاری که به صورت typedef تعریف شده ارث بری کنم
سمیکالن هم در اینجا فراموش کرده بودم.ارور هم اینه که میگه ref فقط از ref , interface ارث میبره نه از یه ساختار یا کلاس unmanaged

Hadirj
دوشنبه 20 دی 1389, 06:17 صبح
طبق MSDN (http://msdn.microsoft.com/en-us/library/988aabex.aspx) ارث بری از کلاس که بصورت typedef باشه ممکن نیست

mehdi.mousavi
پنج شنبه 23 دی 1389, 19:23 عصر
با سلام خدمت شما من می خواهم از کلاس یا ساختاری که به صورت typedef تعریف شده ارث بری کنم

سلام.
کلاسی که میخواهید اینکارو انجام بدید و typedef اش کرده اید، Native هستش؟ اگر اینطوره، شما نمی تونید یک کلاس Managed رو از یک کلاس Native (یا بالعکس) Derive کنید. (چرا؟ چون یکیش تو Managed Heap مدیریت میشه، اون یکی در Heap). علاوه بر این، typedef های شما پس از Compile شدن کد Managed، در Meta Data ها قرار نمیگیرن، در نتیجه، خارج از Assembly ایجاد شده قابل استفاده نیستن.

لطفا بفرمایید سعی در حل چه مشکلی دارید، شاید بتونم کمکتون کنم.

موفق باشید.

پاورقی: شما می تونید یک کلاس Managed ایجاد کنید، بگونه ای که این کلاس در درون خودش، از کلاس Native برای ارائه همون سرویسها استفاده کنه. سپس، کلاس Managed جدید رو از این کلاس Managed درایو کنید. درسته که اینطوری کد Boilerplate ای باید بنویسید، اما حداقل مشکلتون رفع میشه (اگر اصرار بر Derive کردن کلاس مورد نظر از اون یکی کلاس دارید).