سه شنبه, ۱۱ اردیبهشت, ۱۴۰۳ / 30 April, 2024
مجله ویستا
مقایسه خواص عمومی یک کلاس در 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
همچنین مشاهده کنید
نمایندگی زیمنس ایران فروش PLC S71200/300/400/1500 | درایو …
دریافت خدمات پرستاری در منزل
pameranian.com
پیچ و مهره پارس سهند
خرید بلیط هواپیما
مجلس شورای اسلامی ایران مجلس خلیج فارس بابک زنجانی قوه قضائیه دولت دولت سیزدهم حجاب شورای نگهبان مجلس یازدهم محمدباقر قالیباف
قوه قضاییه هواشناسی شهرداری تهران تهران سیل شورای شهر تهران دستگیری آموزش و پرورش سلامت پلیس قتل شورای شهر
قیمت دلار خودرو قیمت طلا سایپا ایران خودرو بازار خودرو دلار تورم بانک مرکزی قیمت خودرو مالیات ارز
تلویزیون سینمای ایران سریال سینما فیلم تئاتر موسیقی دفاع مقدس رسانه ملی بازیگر محمدرضا گلزار کتاب
سازمان سنجش شورای عالی انقلاب فرهنگی آموزش عالی
رژیم صهیونیستی اسرائیل آمریکا غزه فلسطین جنگ غزه حماس روسیه نوار غزه عربستان اوکراین ترکیه
فوتبال استقلال پرسپولیس سپاهان تراکتور باشگاه استقلال تیم ملی فوتسال ایران فوتسال وحید شمسایی بازی باشگاه پرسپولیس لیگ برتر
هوش مصنوعی اینترنت تبلیغات فناوری اپل همراه اول پهپاد گوگل روزنامه آیفون
داروخانه سازمان غذا و دارو خواب کاهش وزن بارداری دیابت طول عمر سلامت روان قهوه فروش اینترنتی دارو آلزایمر