تعداد فروش | 0 دانشجو |
---|---|
پرسش و پاسخ ها | 0 کاربر |
تاریخ انتشار | 13 اردیبهشت 1402 |
سطح تمرین | سخت |
در این پست قصد داریم چندین نمونه سوال درس برنامه نویسی پیشرفته را بررسی و پاسخ دهیم.
روال بدین صورت میباشد که ابتدا سوال را مطرح و توضیحات راجع به آن میدهیم و سپس پاسخ و دلیل آن و سورس کد را قرار میدهیم.
تمرین پیاده سازی دفترچه تلفن فایل
سوال اول: با توجه به قطعه کد زیر به سوالات پاسخ دهید.
الف) کدام دستور منجر به خطا میشود؟ علت را توضیح و آن دستور را حذف نمایید؟
ب) خروجی برنامه چیست؟
سورس کد به شرح زیر میباشد:
#include <iostream> using namespace std; class Distance{ private: static int count; int feet;float inches; public: Distance(int ft=0,float in=0.0): feet(ft),inches(in){count++;} ~Distance(){count--;} int getcount(){return count;} void getdist(){ cout<<"\nEnter feet "; cin>>feet; cout <<"Enter Inches :" ; cin>>inches; } void showdist() const {cout<<feet<<"\'-"<<inches <<"\'";} }; int Distance::count = 0 ; int main() { const Distance d1(7,5); Distance * d2 = new Distance(); Distance d3(12); d1.getdist(); d1.showdist(); cout<<endl; cout<<d2->getcount()<<endl; delete d2; cout<<d3.getcount()<<endl ; return 0; }
همانطور که مشاهده میکنید کلاس Distance تعریف شده با متد هایی که هر کدام یک کاری را انجام میدهند.
اگر دقت کنید فیلدی از نوع استاتیک بنام count تعریف شده که خروجی نهایی در این متغییر محاسبه میشود.
کل این سورس کد به این اشاره دارد که ما به ازای سازنده کلاس میتوانیم به فیلد استاتیکی مقدار اضافه کنیم.
و به ازای مخرب کلاس میتوانید از آن مقداری را کسر کنیم.
پس خطای در برنامه کلمه کلیدی const هنگام ایجاد شی از کلاس distance میباشد.
تمرین نمایش تعداد جمله های متن
سورس کد بخش خطا به شرح زیر میباشد:
const Distance d1(7,5);
چرا این خطا به وجود می آید؟
پس از ایجاد شی متد های زیر فراخوانی میشوند:
d1.getdist(); d1.showdist();
هنگامی که متد get dist فراخوانی میشود مقادیر feet , inches مجدد دریافت میشود ولی ما بالاتر گفتیم که از نوع const هستند پس اینجا خطا بوجود می آید.
پس اگر const را از هنگام تعریف شی d1 برداریم برنامه به درستی کار میکند.
نکته: پس از ثبت نام و یا ورود به حساب کاربری خود میتوانید سورس کد قابل اجرا این نمونه سوال را دریافت نمایید.
اما خروجی این سوال چیست؟ خروجی برنامه میشود تعداد دفعات ساخت و حذف شی از کلاس Distance
یعنی ما سه بار ابتدا از کلاس distance نمونه سازی انجام دادیم پس اولین cout خروجی 3 دارد.
و ما بعد از آن از دستور delete استفاده کردیم پس یک مخرب فراخوانی شد و cout بعدی خروجی 2 میشود.
سوال دوم: برنامه ای بنویسید که پیغام زیر را نمایش دهد؟
“Salam havij”
پاسخ سوال:
نکته سوال اینجا میباشد که شما برای چاپ ” باید از “\ استفاده نمایید.
سورس کد به شرح زیر میباشد:
#include <iostream> using namespace std; int main() { cout << "\"salam havij\""; return 0; }
سوال سوم: متدی تعریف نمایید که نام کلاس های والد کلاس فعلی را برگرداند؟
برای اینکه بتوانیم نام کلاس های والد کلاس فعلی را برگردانیم باید ابتدا با چند تابع و عملگر آشنا شویم.
تمرین پیاده سازی کلاس string سفارشی
با کمک این عملگر میتوانیم نوعی به آن بدهیم و آیدی آن را دریافت کنیم و در نهایت با تابع ()name نام کلاس را خروجی بگیریم.
مثال:
typeid(Parent).name()
خروجی میشود نام کلاس Parent به همراه آیدی آن
با کمک این تابع میتوانیم بررسی کنیم که کلاسی از یک کلاس دیگر ارث بری میکند یا خیر.
نحوه استفاده تابع is_base_of
#include <iostream> #include <type_traits> #include <string> using namespace std; class Parent { public: Parent(){ } }; class Parent1 { public: Parent1(){ } }; class Parent2 { public: Parent2(){ } }; class Child : public Parent , public Parent1 , public Parent2 { public : void getName(){ } }; int main() { string result; result= std::is_base_of<Parent, Child>() == 1 ? (string)typeid(Parent).name():""; cout<<result<<endl; return 0; }
با کمک این مثال مشخص کردیم که آیا کلاس chid زیر مجموعه کلاس Parent هست یا خیر .
اما سورس کد نهایی پروژه به شرح زیر میباشد:
نکته: پس از ثبت نام یا ورود به حساب کاربری خود میتوانید سورس کد کامل را دریافت نمایید.
پرسش و پاسخ ها
هنوز بررسیای ثبت نشده است.