PDA

View Full Version : مقایسه خواص عمومی یک کلاس در C++ و C#



amir.NET2
دوشنبه 11 دی 1385, 13:44 عصر
قبل از بررسی تفاوت بین کلاسها بین 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 می باشد.

maryam82
جمعه 28 فروردین 1388, 20:06 عصر
با تشکر
خوشحال مي شم بتونم باهاتون همکاري کنم.

golestani
چهارشنبه 28 مرداد 1388, 18:17 عصر
از نظر کلاس های از پیش تعریف شده تفاوتی بین c# & C++ هست. من نمیدانم کدام زبان را شروع کنم