X
تبلیغات
زولا

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

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

جلسه یازدهم

کلاس (class):

یک نوع داده است که توسط برنامه نویس ایجاد می شود شبیه ساختار. هر کلاس دارای خصوصیات (property ) و متدهایی است. منظور از متد عملیاتی است که انجام می دهد. کلاس پایه ایجاد شی گرایی است.

Private: متدها یا خصوصیاتی که در بیرون از کلاس قابل دسترس نیستند.

Public: متدها یا خصوصیاتی که در بیرون از کلاس قابل دسترس هستند.

Class sample

{

Private:

          int size;

Public:

          Float f1;

};

Sample s1;

S1.size=34; èerror

S1.f1=14.78;èصحیح

شکل کلی تعریف کلاس

class نام کلاس{

تعریف خصوصیات ومتدهای خصوصی(private)

public:

تعریف خصوصیات ومتدهای  عمومی

};

 

class mashin{

int tedade_charkh;

char name[50];

char rang[30];

public:

         

};

 

برای استفاده از یک کلاس باید نمونه ای از آن کلاس (object- شی) ساخته شود.

void main()

{

mashin x;

x.tedade_charkh=4;

 

خط فوق خطا دارد. چرا؟  چون که خاصیت tedade_charkh به صورت private تعریف شده است.

پس چگونه تعداد چرخهای ماشین x را تنظیم کنیم؟

جواب: تابعی عمومی (public)می نویسیم که با دریافت مشخصات تعداد چرخ، نام و رنگ ماشین این سه خاصیت فوق را مقدار دهی کند.

}

اصلاح شده کلاس فوق:

class mashin{

int tedade_charkh;

char name[50];

char rang[30];

public:

void tanzim(int t,char n[50],char r[30])

{

tedade_charkh=t;

strcpy(name,n);

strcpy(rang,r);

}

void showinfo()

{

          cout<<”tedade charkh=”<< tedade_charkh;

cout<<”\nname=”<<name;

}

};

 

اگر خاصیت tedade_charkh به صورت خصوصی تعریف شده پس چرا تابع tanzim از این خاصیت استفاده کرده ؟

جواب: یک متغیر خصوصی فقط برای اعضای داخلی کلاس قابل دسترس است و از بیرون از کلاس در دسترس نیست. داخل کلاس خصوصیات private در دسترس اند ولی خارج از کلاس خیر.  تابع tanzim داخل کلاس تعریف شده حق دسترسی به همه خصوصیات private را دارد.

mashin m1;

m1.tanzim(18,”تریلی  “, “ صورتی”);

m1.showinfo(); è tedade charkh=18   name=تریلی

سوال:کلاسی بنویسید برای student شامل مقادیر خصوصی شماره دانشجویی، نام،معدل. از طریق تابعی عمومی میخواهیم این مقادیر خصوصی را مقداردهی کنیم و از طریق تابعی وضعیت مشروط بودن یا نبودن آن دانشجو را مشخص کنیم.

class student

{

int stid;

char name[40];

float average;

public:

void tanzim_moshakhesat(int id,char n[40],float avg)

{

stid=id;

strcpy(name,n);

average=avg;

}

int mashroot()

{

  if (average<12)

          return 1;

else

          return 0;

}

};

Void  main()

{

 student s1;

s1.tanzim_moshakhesat(1234,"reza rezaee",14.56);

if (s1.mashroot()==1)

          cout<<"\n s1 mashroot ast";

else

          cout<<"\n s1 mashroot nist";

getch();

}

آیا میتوان مشخصات دانشجو را از کاربر گرفت.

داخل main برنامه می نویسیم

int id;

char name[40];

float average;

cout<<"\n enter id,name,avg:";

cin>>id;

gets(name);

cin>>average;

student s2;

s2.tanzim_moshakhesat(id,name,average);

if (s2.mashroot()==1)

          cout<<"\n "<<name<<" mashrooooooot ast";

else

cout<<"\n "<<name<<" mashrooooooot nist";

 

کلاسی برای زمان شامل ساعت دقیقه ثانیه بنویسید و تابعی که این سه مقدار را تنظیم کند و تابع دیگری که کل زمان را برحسب ثانیه برگرداند.

class time{

int hours, minuet,second;

public:

void tanzimtime(int h,int m,int s)

{

//hours=h;

hours=(h>=0 && h<24)? h : 0;

//if (h>=0 && h<24) hours=h; else hours=0;

minuet=(m>=0 && m<60)? m : 0;

second=(s>=0 && s<60)? s : 0;

}

int saniyeh()

{

return hours*3600+minuet*60+second;

}

void showtime()

{

cout<<"\n"<<hours<<":"<<minuet<<"':"<<second<<"\"";

}

};

void main()

{

time t1;

int a,b,c;

cin>>a;

cin>>b;

cin>>c;

t1.tanzimtime(a,b,c);

cout<<t1.saniyeh();

t1.showtime();è16:45’:26”

getch();

 }

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

class Sample

{

….

public :

نوع خروجی   نام تابع();

};

 

نوع خروجی  Sample:: نام تابع()

{

پیاده سازی تابع

}

پس کلاس فوق را به شکل زیر هم می توان نوشت

class time{

int hours, minuet,second;

public:

void tanzimtime(int h,int m,int s);

int saniyeh();

void showtime()

};

void time::tanzimtime(int h,int m,int s)

{

hours=(h>=0 && h<24)? h : 0;

minuet=(m>=0 && m<60)? m : 0;

second=(s>=0 && s<60)? s : 0;

}

int time::saniyeh()

{

return hours*3600+minuet*60+second;

}

void time::showtime()

{

cout<<"\n"<<hours<<":"<<minuet<<"':"<<second<<"\"";

}

کلاسی برای مستطیل بنویسید از طریق تابعی درون کلاس طول وعرض مستطیل را تنظیم کنید از طریق تابع دیگری که پیاده سازی آن تابع بیرون از کلاس انجام می شود مساحت مستطیل را برگردانید.

 

 

class Rectangle

{

          int length;

int width;

public:

          void setlw(int l,int w);

          int area();

};

 

void Rectangle::setlw(int L,int W)

{

          if (L>0) length=L;else length=1;

          if (W>0)width=W;else width=1;

}

int Recatangle::area()

          {

          return length*width;

}

 

سازنده (constructor)کلاس

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

class rectangle

{

          int length;

          int width;

public:

rectangle()

{        length=1;

width=1;

}

rectangle(int L)

{        length=L;

width=1;

}

rectangle(int L,int W)

{        length=L;

width=W;

}

int area()

{

          return length*width;

}

};

 

void main()

{

rectangle r1,r2(12),r3(12,9);

cout<<”\n area r1=”<<r1.area();//1

cout<<”\n area r2=”<<r2.area();//12

cout<<”\n area r3=”<<r3.area();//108

}

میتوان توابع سازنده را بیرون کلاس هم تعریف کرد مثلا سازنده سوم را اگر بخواهیم بیرون از کلاس پیاده سازی کنیم به شکل زیر خواهد بود:

Rectangle::Rectangle(int L,int W)

          {

                    length=L;

                    width=W;

          }

کلاسی برای مثلث بنویسید شامل دو خاصیت خصوصی قاعده و ارتفاع که دارای سه سازنده باشد، و تابعی به نام مساحت (area) بنویسید که مساحت مثلث را بدهد.

class Triangle

}

int base;

int height;

public:

Triangle()

{ base =1; height=1; }

Triangle(int x)

{ base =x; height=1; }

Triangle(int x,int y)

{ base =x; height=y; }

float area()

{return base*height/2.0;}

{;

void main()

{       

int x,y;

cout<<”\n x,y:”;

cin>>x>>y;

Triangle t1,t2(x),t3(x,y);

cout<<”\nt1.area()=”<<t1.area();

cout<<”\nt2.area()=”<<t2.area();

cout<<”\nt3.area()=”<<t3.area();

 

}


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

(*.cpp)