در این قسمت تیم کدگیت را با آموزش شی گرایی در سی پلاس پلاس همراهی کنید. در این آموزش ابتدا شی گرایی را معرفی میکنیم. در ادامه کلاس و شی را توضیح داده و در آخر مثالی را پیاده سازی میکنیم. پیشنهاد میشود آموزشهای ابتدایی سی پلاس پلاس را قبل از ادامه این آموزش، مطالعه کنید.
شی گرایی
همه چیز در مورد اشیا است. همانطور که اشیا در دنیای واقعی رفتار میکنند، در دنیای نرم افزار نیز همانگونه اند. اشیا در یک برنامه تقریبا همه کار را انجام میدهند. به عنوان مثال ماشین ها شتاب میگیرند یا انسان ها راه میروند(انسان نیز یک شی است) یا هواپیماها پرواز میکنند و ماهی ها شنا میکنند. به طور مشابه ما در نرم افزار نیز ما اشیایی میسازیم که رفتاری خاص را انجام میدهند. و ما از آن برنامه انتظار داریم که رفتارهای اشیا را انجام دهند(راه رفتن، پرواز کردن …). پس موقعی که نرم افزار ما اجرا میشود اشیا ما به وجود می آیند.
کلاسها و شیها در سی پلاس پلاس
کلاسها چکیدهای از اطلاعات هستند یا به زبان دیگر یک طرح کلی (Blueprint) از نوع دادها هستند. البته خود کلاس یک نوع داده (data type) نیست اما یک طرح کلی بوده از این که شی ساخته شده از کلاس شامل چه عملیاتهایی(Function) بوده و چه اطلاعاتی در آن ذخیره میشود.
شیها از کلاسها ساخته میشوند و حاوی اطلاعات و توابعی هستند که در کلاس تعریف شده است. ممکن است کمی تعریفهای شی و کلاس گیج کننده باشد اما با دیدن مثالهای این آموزش براحتی به سادگی مطلب پی میبرید.
برای تعریف کلاس در سی پلاس پلاس از فرمت زیر استفاده میشود:
class Box {
public:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
همانطور که میبینید در کد بالا کلاسی به نام Box ساختهایم. بعد از آن کلمه کلیدی Public به کار رفته که نشان دهنده سطح دسترسی به متغیر است. Public به بقیه کلاس ها توابع این اجازه میدهد که به متغیرهای کلاس Box دسترسی داشته باشید (البته با داشتن شی این کلاس).
برای تعریف شی در سی پلاس پلاس از فرمت زیر استفاده میشود:
Box Box1; // Declare Box1 of type Box
Box Box2; // Declare Box2 of type Box
در بالا دو شی از جنس Box ساختیم. این اشیا هر کدام درون حافظه، متغیرها و توابع خود را دارند و در حافظه به صورت جداگانه ذخیره میشوند. در آموزشهای آینده بیشتر در این مورد صحبت خواهیم کرد.
مثال شی گرایی در سی پلاس پلاس
در این قسمت برای درک بهتر از مفهوم شی گرایی در سی پلاس پلاس مثالی را ذکر میکنیم. در این مثال کلاسی به نام Person ساخته و یک متغیر person name و یک تابع به نام printname در آن تعریف میکنیم. کد این کلاس به صورت زیر است:
class Person
{
// Access specifier
public:
// Data Members
string personname;
// Member Functions()
void printname()
{
cout << "Person name is: " << personname;
}
};
int main() {
// Declare an object of class Person
Person obj1;
// accessing data member
obj1.personname = "CodeGate";
// accessing member function
obj1.printname();
return 0;
}
در کد بالا ما جندین مطلب جدید آوردهایم:
- چگونه یک تابع را در یک کلاس بنویسیم؟ در بالا متد printname را مشاهده کنید.
- چگونه یک متغیر عمومی را در کلاس تعریف کنیم؟ متغیر personname را در کد بالا مشاهده کنید.
- چگونه از main یک شی از کلاس بسازیم؟ متغیر Obj1 را مشاهده کنید.
- چگونه به متغیر ها و توابع یک شی از تابع main دسترسی داشته باشیم؟ دو خط آخر main را مشاهده کنید.
در آموزشهای بعدی توضیحات کاملتری در مورد شی گرایی در سی پلاس پلاس خواهیم داد.
سوال:ارایه ای از کلاس دانشجو تعریف کرده و با دادن مقدار به ویژگی شماره دانشجویی اعضا این آرایه را چاپ کند
ميشه شبه کد اينو بزارید لطفا
سلام. در آموزش بالا کلاس Person را ساخته و ویژگی Personname در آن مقدار دهی کردیم. دقیقا همین فرآیند برای سوال شما صدق می کند. تنها تفاوت ایجاد یک آرایه از کلاس Person است.
با سلام اگر دو تا رشته رو بخوایم به هم بچسبونیم و از کلاس استفاده کنیم کدش چطوری میشه؟!
از تابع strcatباید استفاده کنم ولی کدم درست نمیشه هرکاری میکنم اگر میشه راهنماییم کنید ممنون
سلام. پیشنهاد می کنم کد زیر توی برنامه خود استفاده کنید.
char src[50], dest[50];
strcpy(src, “This is source”);
strcpy(dest, “This is destination”);
strcat(dest, src);
printf(“Final destination string : |%s|”, dest);
این کد تست شده است.
#include
#include
using namespace std;
class str{
friend str operator+(const str&,const str&);
private:
string k;
public:
str& operator=(const str& r);
str(string n){
k=n;
}c
void print(){
cout<<k;
}
};
str operator+(const str& s,const str& l){
str ans=s+l;
return ans;
}
int main()
{
str str1("hello"),str2(" world"),s;
s=str1+str2;
s.print;
return 0;
}
من این کدو نوشتم ولی اخطار میده مشکلشو نمیفهمم
سعی کنید خطا رو پیدا کنید یا در یک کامپایلر آنلاین کد رو اجرا کنید. من از کد شما بدین صورت نمی تونم نتیجه گیری مناسبی کنم.
سلام وقتتون بخیر. چطور باید ارایه ای از اشیا رو فراخوانی کنیم؟
سلام. فرض کنید کلاسی به نام person داریم و می خواهیم آرایه ای از اشیا به کمک person ایجاد کنیم:
Person[] p = new Person[10];
()p[0] = new Person;
()p[1] = new Person;
کد بالا ما آرایه ای از Person ساختیم و دو خانه اول و دوم آرایه ما مقدار دهی شده اند. برای فرخوانی شی اول آرایه کافیه p[0] رو صدا برنی تا به این شی دسترسی پیدا کنی.
اگر می خواهید به کل آرایه دسترسی داشته باشید باید یک حلقه for بر روی آرایه بنویسید تا بتونید به همه آرایه دسترسی پیدا کنید.