کلاسها و اشیاء
در سیپلاسپلاس، کلاسها و اشیاء بنیادیترین عناصر برنامهنویسی شیگرا هستند. کلاس بهعنوان یک قالب یا مدل عمل میکند که شامل دادهها (attributes) و توابع (methods) است و رفتار اشیاء را تعریف میکند. یک شیء نمونهای از یک کلاس است که دارای وضعیت و رفتار مشخص شده توسط کلاس است. استفاده از کلاسها و اشیاء باعث سازماندهی بهتر کد، قابلیت بازاستفاده و نگهداری آسانتر میشود.
کلاسها اصول مهم برنامهنویسی شیگرا از جمله کپسولهسازی، وراثت و چندریختی را پشتیبانی میکنند. آنها به توسعهدهندگان اجازه میدهند تا دادهها و الگوریتمها را بهصورت ساختاریافته مدیریت کنند. در توسعه نرمافزار، کلاسها برای مدلسازی موجودیتهای واقعی، طراحی معماری سیستم و بهینهسازی عملکرد کاربرد دارند. تسلط بر کلاسها و اشیاء باعث میشود سیستمهایی مقیاسپذیر و بهینه ایجاد شود.
در این آموزش، شما با نحوه تعریف کلاسها، ایجاد اشیاء، پیادهسازی متدها، استفاده از الگوریتمها و اعمال بهترین شیوهها مانند مدیریت حافظه، استفاده از STL و بهینهسازی عملکرد آشنا خواهید شد. همچنین به اشتباهات رایج مانند نشت حافظه، مدیریت ناقص خطاها و استفاده ناکارآمد از الگوریتمها پرداخته خواهد شد. این دانش برای توسعه برنامههای حرفهای و مقاوم در سیپلاسپلاس ضروری است.
مثال پایه
text\#include <iostream>
\#include <string>
class Karmand {
private:
std::string name;
int id;
double salary;
public:
Karmand(const std::string& n, int i, double s) : name(n), id(i), salary(s) {}
void setName(const std::string& n) { name = n; }
void setId(int i) { id = i; }
void setSalary(double s) { salary = s; }
std::string getName() const { return name; }
int getId() const { return id; }
double getSalary() const { return salary; }
void display() const {
std::cout << "ID: " << id << "\n"
<< "Name: " << name << "\n"
<< "Salary: $" << salary << "\n";
}
};
int main() {
Karmand k1("Ali Reza", 101, 7500.50);
k1.display();
k1.setSalary(8000.75);
std::cout << "Updated Salary: $" << k1.getSalary() << "\n";
return 0;
}
در این مثال، کلاس Karmand دارای سه ویژگی خصوصی name، id و salary است که از دسترسی مستقیم محافظت میشوند. کپسولهسازی اجازه میدهد فقط از طریق متدهای عمومی setters و getters به دادهها دسترسی پیدا کنیم. سازنده کلاس شیء را هنگام ایجاد مقداردهی اولیه میکند و متد display اطلاعات شیء را نمایش میدهد. استفاده از متدهای const تضمین میکند که وضعیت شیء تغییر نمیکند، که باعث امنیت و خوانایی بالاتر کد میشود. این الگو در سیستمهای واقعی مدیریت کارکنان قابل استفاده است و از نشت حافظه جلوگیری میکند.
مثال کاربردی
text\#include <iostream>
\#include <vector>
\#include <algorithm>
class Mahsool {
private:
std::string name;
int id;
double price;
public:
Mahsool(const std::string& n, int i, double p) : name(n), id(i), price(p) {}
void setPrice(double p) { price = p; }
double getPrice() const { return price; }
std::string getName() const { return name; }
void display() const {
std::cout << "ID: " << id << ", Name: " << name
<< ", Price: $" << price << "\n";
}
};
class Anbar {
private:
std::vector<Mahsool> products;
public:
void addProduct(const Mahsool& p) { products.push_back(p); }
void displayAll() const {
std::cout << "Inventory:\n";
for (const auto& p : products)
p.display();
}
void applyDiscount(double percent) {
for (auto& p : products) {
double discounted = p.getPrice() * (1.0 - percent / 100.0);
p.setPrice(discounted);
}
}
void sortByPrice() {
std::sort(products.begin(), products.end(),
[](const Mahsool& a, const Mahsool& b){ return a.getPrice() < b.getPrice(); });
}
};
int main() {
Anbar store;
store.addProduct(Mahsool("Laptop", 201, 1200.00));
store.addProduct(Mahsool("Phone", 202, 800.50));
store.addProduct(Mahsool("Headphones", 203, 150.75));
store.displayAll();
std::cout << "\nApplying 10% discount...\n";
store.applyDiscount(10);
store.sortByPrice();
store.displayAll();
return 0;
}
در مثال پیشرفته، کلاس Mahsool نماینده محصولات منفرد و کلاس Anbar مدیر مجموعه محصولات است. متدهای applyDiscount و sortByPrice الگوریتمهای کاربردی بر روی اشیاء را نشان میدهند. استفاده از STL و Lambda عملکرد را بهینه کرده و از نشت حافظه جلوگیری میکند. طراحی کلاسها اصول POO شامل کپسولهسازی، تجمیع و مسئولیت واحد را رعایت میکند که نگهداری و مقیاسپذیری سیستم را آسان میسازد.
بهترین شیوهها در سیپلاسپلاس برای کلاسها و اشیاء شامل استفاده صحیح از سازنده و مخرب، ویژگیهای خصوصی، const-correctness، استفاده از کانتینرهای STL، لیستهای مقداردهی اولیه و عبور اشیاء با ارجاع است. اشتباهات رایج شامل مدیریت نادرست حافظه، دسترسی مستقیم به دادههای خصوصی، الگوریتمهای ناکارآمد و عدم مدیریت خطاها است. RAII، smart pointers و اختصاص در پشته به مدیریت ایمن منابع کمک میکنند. برای بهینهسازی، از ارجاعها و move-semantics استفاده کنید و از کپیهای غیرضروری جلوگیری نمایید. امنیت با اعتبارسنجی ورودیها و محافظت از دادههای حساس تضمین میشود.
📊 جدول مرجع
سیپلاسپلاس Element/Concept | Description | Usage Example |
---|---|---|
Class | قالبی برای ایجاد اشیاء با ویژگیها و متدها | class Karmand { private: std::string name; public: void setName(std::string n){name=n;} }; |
Object | نمونه واقعی یک کلاس | Karmand k1("Ali",101,7500.50); |
Constructor | مقداردهی اولیه شیء هنگام ایجاد آن | Karmand(const std::string& n,int i,double s):name(n),id(i),salary(s){} |
Destructor | آزادسازی منابع هنگام نابودی شیء | \~Karmand() { /* cleanup */ } |
Encapsulation | محافظت از دادهها و کنترل دسترسی | private: int id; public: void setId(int i){id=i;} |
Member Function | متدی داخل کلاس برای دستکاری دادهها | void display() const { std::cout<\<name; } |
تسلط بر کلاسها و اشیاء امکان مدلسازی سیستمهای پیچیده، پیادهسازی الگوریتمهای بهینه و ساخت معماری نرمافزار قابل نگهداری را فراهم میکند. نکات کلیدی شامل اهمیت کپسولهسازی و رفتار کنترلشده اشیاء است که پروژههایی مقیاسپذیر و مقاوم ایجاد میکند. گامهای بعدی توصیه شده شامل مطالعه وراثت، چندریختی و الگوهای طراحی برای توسعه برنامههای مدولار و کارآمد است. منابع آموزشی، مستندات سیپلاسپلاس و STL برای یادگیری پیشرفته بسیار مفید هستند.
🧠 دانش خود را بیازمایید
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود