هر آنچه به شما نمی‌آموزند...

۲ مطلب با موضوع «برنامه‌نویسی C++/C» ثبت شده است

اشتباه رایج در مقداردهی اولیه توسط کانستراکتور

یکی از مهمترین ویژگی‌های ++C کارایی و سرعت آن است، اما این امر بخوبی میسر نخواهد شد مگر آنکه ما نیز به عنوان برنامه‌نویس نقش خود را به درستی ایفا کنیم.

امروز میخواهیم یکی از رایج‌ترین اشتباهات برنامه‌نویسان ++C (بخصوص برنامه‌نویسانی که از زبان دیگری به این زبان روی آورده‌اند) را به هنگام ایجاد کانستراکتور یک کلاس تشریح کنیم. فرض کنید کلاسی به نام شخص (Person) داریم که Member Variableهای آن عبارتند از: نام(firstname)، نام خانوادگی (lastname) و سن (age).

این کلاس را به صورت زیر مینویسیم:

class Person
{
private:
std::string firstname;
std::string lastname;
int age;
public:
Person (std::string pFirstname, std::string pLastname, int pAge)
{
firstname = pFirstname;
lastname = pLastname;
age = pAge;
}
};

شما کد را کامپیایل و اجرا میکنید، هیچ خطا یا هشداری داده نمیشود و کد هم به درستی و بدون کوچکترین مشکلی اجرا میشود. اما اگر این نمونه کد را به یک برنامه‌نویس خبره در زبان ++C نشان دهید به شما خواهد گفت این کد درست نیست.

اون موقع هست که از خودتون میپرسید وقتی کد داره به درستی اجرا میشه مشکل من کجاست؟

ادامه مطلب...
۲۴ ارديبهشت ۹۵ ، ۲۳:۴۴ ۰ نظر موافقین ۲ مخالفین ۰

چرا کتابخانه استاندارد iostream در ++C بدرستی خطاها را نمایش نمیدهد؟

یکی از مواردی که برنامه‌نویسان ++C بخصوص برنامه‌نویسانی که تازه به این زبان روی آورده‌اند با آن مواجه هستند این است که به هنگام کار کردن با کتابخانه iostream نمیتوانند به درستی خطاها (Exception) را پوشش دهند. بطور مثال در کد زیر قصد داریم فایلی که وجود ندارد را باز کنیم و با استفاده از بلاک Try...Catch خطاهای احتمالی را پوشش دهیم:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
ifstream file;
try {
file.open("IceCat.ir");
while (!file.eof()) {
cout << file.get();
}
}
catch (...) {
cout << "Error openning file..." << endl;
return 1;
}
file.close();
return 0;
}

اما با اجرای کد بالا با اینکه از بلاک Try...Catch برای هندل کردن Exceptionهای احتمالی استفاده کرده‌ایم،  مشاهده میکنیم که در صورت بوجود آمدن خطا (مانند وجود نداشتن فایل) بطور پی در پی عدد 1- در کنسول چاپ خواهد شد.

در این پست به علت بروز این امر و نحوه حل آن خواهیم پرداخت.

ادامه مطلب...
۰۶ ارديبهشت ۹۵ ، ۲۳:۴۰ ۲ نظر موافقین ۲ مخالفین ۰