سه شنبه, ۱۱ اردیبهشت, ۱۴۰۳ / 30 April, 2024
مجله ویستا

مقایسه خواص عمومی یک کلاس در 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_at۱;
int f۱();
public:
float m_at۲;
int f۲();
CTest();
~CTest();
};
// Test.cpp
#include "test.h"
CTest::CTest(){
m_at۱ = ۰;
m_at۲ = ۰.۰;
}
CTest::~CTest(){
// cout << "destructor call";
}
int CTest::f۱(){
return m_at۱;
}
int CTest::f۲(){
return m_at۱+(int)m_at۲;
}
▪ تفاوت اول:
بر خلاف 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 CTes
{
privateint m_at۱;
public float m_at۲;
privateint f۱()
{
return m_at۱;
}
public int f۲()
{
return m_at۱+(int)m_at۲;
}
public CTest()
{
m_at۱ = ۰;
m_at۲ = ۰.۰f;
}
~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 می باشد.
منبع : prdev


همچنین مشاهده کنید