صفحه اول آخرین ارسال ها جستجو بایگانی راهنما تقویم تماس با ما
مـحل تبلیــغات 

 

مـحل اخبــار و اطلاعیــه ها

«درصـورت بـروز هـرگـونه مشــکلات بـراي ســايت ... جـهت اطـاعات به وبــلاگ پشــتيبـان سـايت مـراجعـه فـرماييد»

«درخــواست مـديـريـت تـوسط شـما کـاربـران عـزيز و گــرامي»

«آپـلود سـنتر پـرقدرت بـا حجم آپـلود بـالاي فـايل هـاي شـما»

مــشاهـدۀ ســایـت به زبــان دیــگر

قدیمی 12 Jan 2011   #1
SAEED
Member
 
SAEED آواتار ها
 
تاریخ عضویت: Jan 2011
نوشته ها: 79
Thanks: 0
Thanked 0 Times in 0 Posts
پیش فرض مقايسه خواص عمومي يك كلاس در++c و#c

مقايسه خواص عمومي يك كلاس در C++ و C#

قبل از بررسي تفاوت بين كلاسها بين C++ و C# ابتدا خاصيت هاي عمومي يك كلاس را بررسي كرده سپس به بررسي تفاوت بين اين دو زبان قدرتمند خواهيم پرداخت.
تعريف. كلاس در حالت ساده مجموعه اي از خواص(attributes) و روش ها (methodes) است كه در رابطه با هم هدف مشتركي را دنبال مي كنند و خدماتي را ارائه مي كنند. البته اين تعريف در حد يك تعريف علمي مي باشد ولي ذكر اين نكته ضروري است كه اكثر تعاريف در شي گرايي در طبيعت وجود دارد و در ساده ترين حالت براي تعريف يك كلاس مي توان از تعريف انسان استفاده كرد كه اين بحث در اين مقاله نمي گنجد. در هر حال ما به تعريف فوق اكتفا كرده و بحث را ادامه مي دهيم.
خواص ها و روش ها كه در تعريف كلاس ارائه شد مي تواند نحوه دسترسي متفاوتي مانند public و private و protected داشته باشد كه براي برنامه نويسان C++ نيازي به توضيح نيست.

تفاوت در تعريف يك كلاس:
چنانچه در مقاله لايه ها در C# نيز اشاره شد يك كلاس در يك برنامه C# در داخل يك لايه تعريف خواهد شد(اجباري نيست). تعريف يك كلاس در C# تفاوتهايي با C++ دارد كه سعي خواهيم كرد اين تفاوت ها را با چند مثال توضيح دهيم.
فرض كنيد كلاس زير در C++ تعريف شده است كه اين كلاس را به يك كلاس C# تبديل خواهيم كرد.
// Test.h
class CTest{
private:
int m_at1;
int f1();
public:
float m_at2;
int f2();
CTest();
~CTest();
};

// Test.cpp
#include "test.h"
CTest::CTest(){
m_at1 = 0;
m_at2 = 0.0;
}
CTest::~CTest(){
// cout << "destructor call";
}
int CTest::f1(){
return m_at1;
}
int CTest::f2(){
return m_at1+(int)m_at2;
}

تفاوت اول:
بر خلاف C++ در C# تعريف و نحوه عملكرد يك تابع يا Method در خود تعريف كلاس قرار داده مي شود. در C++ غالبا تعريف كلاس در فايل .h و بدنه توابع در فايل .cpp قرار مي گرفت. البته ذكر اين نكته ضروري است كه مي توان همين عمل را در .h نيز قرار داد ولي در يك برنامه بزرگ اين عمل كنترل برنامه را از دست برنامه نويس خارج كرده و همچنين مشكلات ديگري را براي برنامه نويسان ايجاد مي كند كه برنامه نويسان C++ با اين مشكلات آشنا هستند.
تفاوت دوم:
بر خلاف C++ در C# يك دسته از متغييرها را نمي توان بصورت public يا private و ... تعريف كرد و براي هر متغيير بايد نحوه دسترسي به آن نيز مشخص شود.

تفاوت سوم:
بر خلاف C++ در C# تابع destructor وجود ندارد و خود C# مسئول از بين بردن يك شي مي باشد كه اين از بين بردن با توجه به محدوده تعريف اين شي انجام مي شود. البته تعريف destructor وجود دارد ولي نمي توان destructor را فراخواني كرد . در C++ فراخواني Destructor با استفاده از عملگر delete قابل انجام بود ولي چون C# مديريت object ها را خود بعهده مي گيرد شي ايجاد شده نميتواند توسط برنامه خراب شود. اين مطلب در مقالات بعدي مورد بررسي قرار خواهد گرفت.
با توجه به تفاوتهاي ذكر شده مي توان اين كلاس را به صورت زير براي يك كلاس C# ارائه كرد.

// Test.cs
using System;
namespace NS
{
publicclass CTest
{
privateint m_at1;
public float m_at2;
privateint f1()
{
return m_at1;
}
public int f2()
{
return m_at1+(int)m_at2;
}
public CTest()
{
m_at1 = 0;
m_at2 = 0.0f;
}
~Test()
{
// Console.WriteLine("destructor call");
}
}
}

ايجاد يك كلاس در ++ و #
در موقع استفاده از يك كلاس اگر از default constructor براي ايجاد يك كلاس استفاده مي شود در C# بايد constructor بصورت void فراخواني شود ( مانند توابع void معمولي)
به مثال زير دقت كنيد.
// C++ code
CTest *a;
a = new CTest;

// C# Code
CTest a;
a = new CTest();

ذكر اين نكته ضروري است كه در C# وقتي كلاسي تعريف مي شود در واقع اشاره گر به آن كلاس معرفي مي شود بنابراين با تعريف CTest a كلاسي از CTest ايجاد نمي شود و فقط يك اشاره گر از CTest تعريف مي شود و براي ايجاد يك كلاس استفاده از عملگر new اجباري است.
ولي در C++ تعريف CTest a به منزله ايجاد يك كلاس و فراخواني Default Constructor مي باشد
SAEED آنلاین نیست.   پاسخ با نقل قول

5 Lastest Threads by SAEED
Thread Forum Last Poster Replies Views Last Post
ماشینهای کم ارتفاع(خسته) اتومبيل هاي اسپرت SAEED 0 16610 24 Jan 2011 10:42
عکس نمایشگاه تیونینگ جده ۴ اتومبيل هاي اسپرت SAEED 0 4663 24 Jan 2011 10:39
تیونینگ » Sportec 580 اسب بخاری اتومبیل جنگنده و... مقايسه اتومبيل SAEED 0 5821 24 Jan 2011 10:28
مقایسه ی فنی رنو مگان و تندر ۹۰ (لوگان) مقايسه اتومبيل SAEED 0 4684 24 Jan 2011 10:23
بررسی خودرو های ۳۰ تا ۳۵ میلیون تومانی مقايسه اتومبيل SAEED 0 4503 24 Jan 2011 10:22

پاسخ


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 
ابزارهای موضوع جستجو در موضوع
جستجو در موضوع:

جستجوی پیشرفته
نحوه نمایش

مجوز های ارسال و ویرایش
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید

BB code فعال است
شکلک ها فعال است
[IMG] فعال است
کد HTML غیر فعال است

انتخاب سریع یک انجمن

موضوعات مشابه
موضوع نویسنده موضوع انجمن پاسخ ها آخرين نوشته
مقايسه خواص عمومي يك كلاس در++c و#c SAEED C++ & C# & C 0 12 Jan 2011 09:48
اجزا يك برنامه حرفه اي ( بخش پنجم آموزش دلفی) SAEED Delphi 0 12 Jan 2011 09:34


اکنون ساعت 10:18 برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.