ادامه مباحث کلاس
کلاس تاریخ (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)