سازنده‌ها و تخریب‌کننده‌های کلاس در ++C

سازنده کلاس

سازنده کلاس (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 به اشاره‌گر آن  اعمال گردد.

مطلب پیشنهادی:  دستور زبان پایه‌ای ++C

یک تخریب‌کننده دقیقاً هم نام با کلاس است با این تفاوت که یک (~) پیش از نام آن قرار می‌گیرد. این تابع هیچ مقداری را برنمی‌گرداند و هیچ پارامتری را نیز دریافت نمی‌کند. تخریب کننده‌ها در آزادسازی منابع قبل از خروج از برنامه، یعنی بستن فایل‌ها، آزادسازی حافظه و… بسیار مفید هستند.

مثال زیر مفهوم تخریب کننده را توضیح می‌دهد.

#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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *