X
تبلیغات
رایتل

برنامه نویسان کامپیوتر

این وب سایت به منظور استفاده دانشجویان دانشگاه شهید بهشتی کرج ایجاد شده

جلسه دوازدهم

ادامه مباحث کلاس

 

کلاس تاریخ (Date ) شامل مقادیر خصوصی روز و ماه و سال بنویسید که دارای چهار سازنده باشد وتابعی به نام showdate بنویسید که تاریخ را به شکل   روز/ماه/سال نشان دهد.

class Date

{

          private:

                   int year;

                   int month;

                   int day;

          public:

                   Date(){year=1390;month=1;day=1;}

                   Date(int d){ year=1390;

month=1;

day=(d>0 && d<=31)?d:1;}

                   Date(int m,int d){ year=1390;

month=(m>=1 && m<=12)?m:1;

day=(d>0 && d<=31)?d:1;}

                   Date(int y,int m,int d){

                                                year=(y>=1 && y<=1400)?y:1;

month=(m>=1 && m<=12)?m:1;

day=(d>0 && d<=31)?d:1;}

}

void showdate()

{

cout<<year<<”/”<<month<<”/”<<day;

}

};

کلاسی برای کسر بنویسید به نام Kasr که دارای دو مقدار خصوصی soorat و makhraj دارای 3 سازنده باشد و  تابعی که مقدار آن کسر را به صورت مقداری اعشاری برگرداند  و تابع دیگری که کسر را به صورت “soorat/makhraj” نشان دهد.

class kasr

{

int soorat;

int makhraj;

public:

kasr();

kasr(int s);

kasr(int s,int m);

float value();

void show();

};

kasr:: kasr()

{

          soorat=1;

          makhraj=1;

}

kasr:: kasr(int s)

{

          soorat=s;

          makhraj=1;

}

kasr::kasr(int s,int m)

{

soorat=s;

if(m!=0) makhraj=m;else makhraj=1;

}

 

float kasr::value()

{

return (float)soorat/makhraj;

}

void kasr::show()

{

          cout<<soorat<<”/”<<makhraj;

}

void main()

{kasr k1,k2(7);

int s,m;

cout<<”\nenter soorat, makhraj:”;

cin>>s>>m;

kasr k3(s,m);

cout<<”\n k1=    “;

k1.show();

cout<<”\t”<<k1.value();

cout<<”\n k2=    “;

k2.show();

cout<<”\t”<<k2.value();

cout<<”\n k3=    “;

k3.show();

cout<<”\t”<<k3.value();

}

 

 

کلاسی برای مثلث بنویسید دارای سه مقدار خصوصی (اندازه های سه ضلع مثلث) سه سازنده داشته باشد (با یک ورودی- دو ورودی – سه ورودی )تابعی برای محیط مثلث داشته باشد و تابعی که مشخص می کند که این مثلث قائم الزاویه هست یا خیر

a^2+b^2=c^2

or

c^2+b^2=a^2

or

c^2+a^2=b^2

جواب:

#include <iostream.h>

#include <conio.h>

 

class mosalas

{

int a;

int b;

int c;

public:

mosalas(int x)

{

a=x;

b=x ;

c=x;

}

mosalas(int x,int y)

{

a=x;

b=y;

c=x+y ;

}

mosalas(int x,int y,int z)

{

a=x;

b=y;

c=z ;

}

void mohit()

{

cout<<"\nmohit="<<(a+b+c);

}

int ghaeme()// آیا قائم الزاویه هست یا خیر

{

if ((a*a+b*b==c*c)||(c*c+b*b==a*a)||(c*c+a*a==b*b))

return 1 ;

else

return 0 ;

}

};

void main()

{

mosalas m1(3);

mosalas m2(4,3);

mosalas m3(6,8,10);

cout<<"\n";

 m1.mohit();

cout<<"\n";

 m2.mohit();

cout<<"\n";

 m3.mohit();

if (m1.ghaeme()==1)

cout<<"\nm1 ghaeme ast";

else

 cout<<"\nm1 ghaeme nist";

if (m2.ghaeme()==1)

cout<<"\nm2 ghaeme ast";

else

cout<<"\nm2 ghaeme nist";

if (m3.ghaeme()==1)

cout<<"\nm3 ghaeme ast";

else

cout<<"\nm3 ghaeme nist";

getch();

}

 

سربارگذاری عملگرها(operator overloading)

: یعنی تعریف تازه ای از عملگرهایی مانند +و-و/و*و++و==و....

 

int x=5,y=4;

int z=x+y;// z=9

فرضا بخواهیم دو نمونه از کلاس کسر را با هم جمع کنیم

 

kasr k1(3,7),k2(7,11);

k1.show(); è3/7

k2.show();è7/11

kasr k3=k1+k2;èERROR

امکان جمع دو کسر را می خواهیم با سربارگذاری عملگر + فراهم کنیم.

شکل کلی سربارگذاری یک عملگر:

 

 نوع خروجی عملگرOperator علامت عملگر(نوع ورودی نام ورودی)

مثلا اگر درون کلاس kasr بنویسیم

 

kasr operator+(kasr k)

{

…………..

}

مفهوم کد فوق این است که می خواهیم برای کلاس کسر عملگر + را تعریف کنیم و از شکل کد فوق مشخص است که نتیجه عملیات یک کسر خواهد بود

int operator==(kasr k)

{

}

مفهوم کد فوق این است که می خواهیم برای کلاس کسر عملگر == را تعریف کنیم و از شکل کد فوق مشخص است که نتیجه عملیات یک عدد صحیح (صفر یا یک) خواهد بود

3/5 + 7/4=(3*4+7*5)/20

a/b+c/d=(a*d+b*c  )/b*d

 کد مربوط به سربارگذاری جمع

kasr operator+(kasr k)

{

          kasr temp;

temp.makhraj=makhraj*k.makhraj;

          temp.soorat=makhraj*k.soorat+soorat*k.makhraj

          return temp;

}

K1,k2

K3=k1+k2

کل کلاس کسر

class kasr

{

int soorat;

int makhraj;

public:

kasr();

kasr(int s);

kasr(int s,int m);

float value();

void show();

 kasr operator+(kasr k)

 {

           kasr temp;

           temp.makhraj= makhraj* k.makhraj;

           temp.soorat=soorat*k.makhraj+makhraj*k.soorat;

           return temp;

 }

  kasr operator*(kasr k)

 {

           kasr temp;

           temp.makhraj= makhraj* k.makhraj;

           temp.soorat=soorat*k.soorat;

           return temp;

 }

          int operator==(kasr k)

          {

                   if(value()==k.value())

                   return 1;

                   else

                   return 0;

          }

};

kasr:: kasr()

{

          soorat=1;

          makhraj=1;

}

kasr:: kasr(int s)

{

          soorat=s;

          makhraj=1;

}

kasr::kasr(int s,int m)

{

soorat=s;

if(m!=0) makhraj=m;else makhraj=1;

}

 

float kasr::value()

{

return (float)soorat/makhraj;

}

void kasr::show()

{

          cout<<soorat<<"/"<<makhraj;

}

void main()

{kasr k1(3,7),k2(2,5);

 

cout<<"\n k1=    ";

k1.show();

cout<<"\t"<<k1.value();

cout<<"\n k2=    ";

k2.show();

cout<<"\t"<<k2.value();

kasr k3=k1+k2;

cout<<"\n k3=    ";

k3.show();

cout<<"\t"<<k3.value();

 kasr k4=k1*k2;

 cout<<"\n k4=    ";

 k4.show();

cout<<"\t"<<k4.value();

int s,m;

cout<<"\nenter soorat , makhraj:";

cin>>s>>m;

kasr k5(s,m);

if (k4==k5) cout<<"\nk4,k5 barabarand";

else cout<<"\nk4,k5 barabar nistand";

}

کلاسی برای مثلث بنویسید با دو مقدار خصوصی قاعده و ارتفاع و سه سازنده و تابع دیگری برای کلاس بنویسید که مساحت مثلث را بدهد. عملگر + را برای کلاس به نحوی سربارگذاری کنید که  جمع دو مثلث یعنی ایجاد مثلثی که قاعده اش حاصل جمع دو قاعده و ارتفاعش حاصل جمع ارتفاع دو مثلث باشد.

Triangle T1(12,7),T2(6,10);

Triangle T3=T1+T2;

انتظار می رود T3 مثلثی باشد با قاعده 18 و ارتفاع 17

#include <iostream.h>

class Triangle

{

          int base;

          int height;

public:

          Triangle(){base=1;

          height=1;

          }

          Triangle(int b){

          base = b;

          height=1;}   

          Triangle(int b,int h){base=b;

          height= h;}

          Triangle operator+ (Triangle t)

          {

                   Triangle temp;

                   temp.base=base+ t.base;

                             temp.height=height + t.height;

                             return temp;

 

          }

          float area()

          {

                   return (float)base*height/2;

          }

                   void show()

                   {

                             cout<<"\nbase="<<base;

             cout<<"\t height="<<height;

                   }

};

 

void main()

{ Triangle T1(2,5),T2(8,3),T3(10,5);

          Triangle T4=T1+T2;

          cout<<"\nT1=";

          T1.show();

          cout<<"\nT2=";

          T2.show();

          cout<<"\nT4=";

          T4.show();

          cout<<"\nmasahate T1="<<T1.area();

          cout<<"\nmasahate T2="<<T2.area();

          cout<<"\nmasahate T4="<<T4.area();

}

 

دانلود فایل مثال ها

(*.cpp)