سازنده کلاس
سازنده کلاس (Constructor) یک تابع عضو ویژه از کلاس میباشد که هنگام ایجاد یک شی جدید از آن کلاس اجرا میشود.
سازنده دقیقا همنام کلاس میباشد و هیچ نوع دادهای (حتی void) را برنمیگرداند. سازندهها در مقداردهی اولیه به متغیرهای عضو بسیار مفید هستند.
مثال زیر مفهوم سازنده را توضیح میدهد.
#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // This is the constructor private: double length; }; // Member functions definitions including constructor Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // Main function for the program int main() { Line line; // set line length line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; }
وقتی که کد فوق کامپایل و اجرا شود، خروجی زیر حاصل میشود.
Object is being created Length of line : 6
سازندهی دارای پارامتر (Parameterized Constructor)
سازندهی پیشفرض هیچ پارامتری ندارد، اما اگر نیاز باشد، سازندهها میتوانند پارامتر هم داشته باشند. با این روش میتوان هنگام ایجاد یک شی جدید، مقادیر اولیهای به آن اختصاص داد. مثال زیر را ملاحظه کنید.
#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(double len); // This is the constructor private: double length; }; // Member functions definitions including constructor Line::Line( double len) { cout << "Object is being created, length = " << len << endl; length = len; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // Main function for the program int main() { Line line(10.0); // get initially set length. cout << "Length of line : " << line.getLength() <<endl; // set line length again line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; }
با اجرای این کد، خروجی زیر حاصل میشود.
Object is being created, length = 10 Length of line : 10 Length of line : 6
استفاده از لیست آغازین (Initialization List) برای مقداردهی اولیه فیلدها
برای سازندههای دارای پارامتر، از ساختار زیر برای مقداردهی اولیه فلیدها استفاده میشود.
Line::Line( double len): length(len) { cout << "Object is being created, length = " << len << endl; }
ساختار بالا مشابه ساختار زیر میباشد.
Line::Line( double len) { cout << "Object is being created, length = " << len << endl; length = len; }
اگر در کلاس C فیلدهای X،Y،Z و … وجود داشته باشد، برای مقداردهی اولیه آنها میتوان از دستور زیر استفاده کرد، ملاحظه کنید که نام فیلدها با کاما از هم جدا شده اند.
C::C( double a, double b, double c): X(a), Y(b), Z(c) { .... }
تخریبکنندههای کلاس
تخریبکننده (Destructor) یک تابع عضو ویژه از کلاس است و هنگامی اجرا میشود که شی آن کلاس از دامنه خارج شده و یا دستور delete به اشارهگر آن اعمال گردد.
یک تخریبکننده دقیقاً هم نام با کلاس است با این تفاوت که یک (~) پیش از نام آن قرار میگیرد. این تابع هیچ مقداری را برنمیگرداند و هیچ پارامتری را نیز دریافت نمیکند. تخریب کنندهها در آزادسازی منابع قبل از خروج از برنامه، یعنی بستن فایلها، آزادسازی حافظه و… بسیار مفید هستند.
مثال زیر مفهوم تخریب کننده را توضیح میدهد.
#include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // This is the constructor declaration ~Line(); // This is the destructor: declaration private: double length; }; // Member functions definitions including constructor Line::Line(void) { cout << "Object is being created" << endl; } Line::~Line(void) { cout << "Object is being deleted" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // Main function for the program int main() { Line line; // set line length line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; return 0; }
با اجرای این کد خروجی زیر حاصل میشود.
Object is being created Length of line : 6 Object is being deleted
منبع: ترجمه از سایت tutorialspoint.com
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.