ویژگی تصویر

آموزش کلاس‌ها و شیء‌گرایی در C++

  /  سی پلاس پلاس   /  کلاس‌ها و شیء‌گرایی در C++
بنر تبلیغاتی الف

در این بخش به بررسی کلاس‌ها و شیء‌گرایی در C++ می پردازیم، برنامه‌نویسی شیء‌گرا (Object-Oriented Programming یا OOP) یکی از مفاهیم اساسی و حیاتی در دنیای برنامه‌نویسی مدرن است. زبان C++ به عنوان یکی از زبان‌های پیشرو در این حوزه، امکان ایجاد و استفاده از کلاس‌ها و شیء‌ها را به برنامه‌نویسان می‌دهد. این روش برنامه‌نویسی نه تنها کد را قابل خواندن و نگهداری می‌کند، بلکه امکان طراحی سیستم‌های پیچیده و بزرگ را به صورت ماژولار فراهم می‌سازد.

در این مقاله، به بررسی اصول و مبانی برنامه‌نویسی شیء‌گرا در زبان C++ خواهیم پرداخت. ابتدا با مفهوم کلاس‌ها و شیء‌ها آشنا می‌شویم، سپس به بررسی مفاهیمی مانند وراثت (Inheritance)، چندریختی (Polymorphism)، انتزاع (Abstraction)، و محفظه‌بندی (Encapsulation) خواهیم پرداخت. هر بخش از مقاله شامل توضیحات تئوریک و مثال‌های کاربردی برای فهم بهتر مفاهیم است.

کلاس‌ها و شیء‌ها در سی پلاس پلاس

کلاس‌ها ساختارهایی هستند که به عنوان قالب‌هایی برای ایجاد شیء‌ها (Objects) عمل می‌کنند. کلاس‌ها می‌توانند داده‌ها و توابع را درون خود داشته باشند. شیء‌ها نمونه‌های واقعی از کلاس‌ها هستند که به طور مستقل عمل می‌کنند. برای تعریف یک کلاس در C++، از کلمه کلیدی class استفاده می‌شود.

تماشا در حالت تمام صفحه

در مثال بالا، یک کلاس Car تعریف شده است که سه متغیر عضو (brand، model، و year) و یک تابع عضو (displayInfo) دارد. اکنون می‌توانیم از این کلاس برای ایجاد شیء‌های مختلف استفاده کنیم.

تماشا در حالت تمام صفحه

در اینجا، شیء car1 از کلاس Car ایجاد شده و مقادیر آن تنظیم شده است. سپس، تابع displayInfo فراخوانی شده تا اطلاعات خودرو نمایش داده شود.

محفظه‌بندی (Encapsulation)

محفظه‌بندی یکی از اصول کلیدی OOP است که به مخفی‌سازی جزئیات پیاده‌سازی یک کلاس و نمایش فقط رابط‌های عمومی (Public Interfaces) اشاره دارد. این کار با استفاده از تعیین دسترسی اعضای کلاس انجام می‌شود: public، private، و protected.

تماشا در حالت تمام صفحه

در مثال بالا، متغیرهای length و width به صورت خصوصی (private) تعریف شده‌اند، بنابراین فقط از طریق توابع عمومی کلاس (setDimensions و calculateArea) قابل دسترسی هستند. این امر از دسترسی مستقیم به این متغیرها جلوگیری می‌کند و امنیت داده‌ها را افزایش می‌دهد.

وراثت (Inheritance)

وراثت یکی از ویژگی‌های مهم OOP است که به یک کلاس اجازه می‌دهد تا خصوصیات و رفتارهای یک کلاس دیگر را به ارث ببرد. کلاس پایه (Base Class) و کلاس مشتق (Derived Class) مفاهیمی هستند که در وراثت به کار می‌روند.

تماشا در حالت تمام صفحه

در اینجا، کلاس Dog از کلاس Animal به ارث برده شده است و علاوه بر توابع و ویژگی‌های کلاس پایه، ویژگی‌های خاص خود را نیز دارد.

int main() {
    Dog myDog;
    myDog.eat();  // From Animal class
    myDog.bark(); // From Dog class
    return 0;
}

در این مثال، شیء myDog از کلاس Dog ایجاد شده و می‌تواند به توابع هر دو کلاس Animal و Dog دسترسی داشته باشد.

چندریختی (Polymorphism)

چندریختی به قابلیت یک شیء اشاره دارد که می‌تواند به چندین شکل مختلف عمل کند. در C++، چندریختی معمولاً با استفاده از کلاس‌های پایه و مشتق و توابع مجازی (Virtual Functions) پیاده‌سازی می‌شود.

تماشا در حالت تمام صفحه

در این مثال، کلاس Shape یک تابع مجازی draw دارد که در کلاس‌های مشتق Circle و Square بازتعریف شده است.

تماشا در حالت تمام صفحه

با استفاده از چندریختی، می‌توان از یک اشاره‌گر کلاس پایه برای فراخوانی توابع مختلف در کلاس‌های مشتق استفاده کرد.

انتزاع (Abstraction)

انتزاع به پنهان‌سازی جزئیات پیچیده و نمایش تنها جنبه‌های ضروری و مربوط به یک شیء اشاره دارد. این مفهوم از طریق کلاس‌ها و توابع انتزاعی (Abstract Classes and Functions) در C++ پیاده‌سازی می‌شود.

تماشا در حالت تمام صفحه

در اینجا، AbstractShape یک کلاس انتزاعی است که تابع مجازی خالص draw را تعریف می‌کند. کلاس Triangle این تابع را پیاده‌سازی می‌کند.

int main() {
    AbstractShape* shape = new Triangle();
    shape->draw(); // Calls Triangle's draw

    delete shape;
    return 0;
}

این مثال نشان می‌دهد که چگونه از انتزاع برای طراحی سیستم‌های ماژولار و قابل توسعه استفاده می‌شود.

این مقاله سعی کرد تا به شکلی جامع و دقیق اصول برنامه‌نویسی شیء‌گرا در C++ را توضیح دهد و با مثال‌های کاربردی به فهم بهتر این مفاهیم کمک کند. با توجه به اهمیت و گستردگی این موضوع، توصیه می‌شود که به منابع مرجع مراجعه کنید و به تمرین و تجربه بیشتری در این زمینه بپردازید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج