در این قسمت تیم کدگیت را با آموزش Copy Constructor در سی پلاس پلاس همراهی کنید. در این آموزش به معرفی Copy Constructor میپردازیم. بعد از معرفی این تابع، دلیل استفاده آن را توضیح میدهیم و در آخر چند مثال را پیاده سازی میکنیم. پیش نیاز این آموزش شامل موارد زیر است:
Copy Constructor در سی پلاس پلاس
در آموزش گذشته در مورد Constructor و انواع آن صحبت شد. همانطور که گفتیم Constructor در واقع یک شی را میسازد و هنگام ساخت شی این تابع صدا زده میشود. اما یک تابع دیگری نیز وجود دارد به نام Copy Constructor که مانند Constructor هنگام ساخت شی صدا زده میشود اما در باطن تفاوتهایی نیز دارد. تابع Copy Constructor موقعی صدا زده میشود که بخواهیم یک شی را با استفاده از شی دیگر ایجاد کنیم. برای شفاف سازی این مطلب مثالی را خواهیم زد.
مثال Copy Constructor در سی پلاس پلاس
Copy Constructor در یک کلاس را به صورت زیر تعریف میکنند:
ClassName (const ClassName &old_obj);
تعریف بالا شبیه به Constructor است اما ورودی که از جنس Refrence خود شی باشد Copy Constructor و Constructor را از هم جدا میکند. در آموزشهای گذشته کلاسی به نام Point ایجاد کرده و در Constructor آن دو متغیر x و y را مقدار دهی کردیم. با استفاده از همان کلاس Copy Constructor نیز خواهیم نوشت. کد این مثال به صورت زیر است:
class Point {
private:
int x, y;
public:
Point(int x1, int y1) {
cout << "Constructor Called"<< endl;
x = x1;
y = y1;
}
// Copy constructor
Point(const Point &p2) {
cout << "Copy Constructor Called"<< endl;
x = p2.x;
y = p2.y;
}
int getX() {
return x;
}
int getY() {
return y;
}
};
int main() {
Point p1(10, 15); // Normal constructor is called here
Point p2 = p1; // Copy constructor is called here
// Let us access values assigned by constructors
cout << "p1.x = " << p1.getX() << ", p1.y = " << p1.getY();
cout << "\np2.x = " << p2.getX() << ", p2.y = " << p2.getY();
return 0;
}
در کد بالا یک کلاس Point نوشتیم که از Copy Constructor استفاده میکند. در این کد همانطور که میبینید Copy Constructor یک ورودی از جنس Point گرفته و متغیرهای خود را از آن ورودی ساخته است. خروجی کد بالا به صورت زیر است:
Constructor Called
Copy Constructor Called
p1.x = 10, p1.y = 15
p2.x = 10, p2.y = 15
Default Copy Constructor
با توجه به صحبتهایی که شد هنگام ساخت کپی یک شی از Copy Constructor استفاده میشود. اما سوالی که مطرح است جگونه رفتار کردن سی پلاس پلاس در موقع ننوشتن این تابع است؟ در جواب باید گفت سی پلاس پلاس به صورت پیش فرض از Default Copy Constructor استفاده میکند. در تصویر زیر نحوه رفتار سی پلاس پلاس در صورت استفاده از Default Copy Constructor را نشان میدهد.

اما اگر یک Copy Constructor توسط ما نوشته شود میتواند دیاگرام زیر را داشته باشد:

ممنون عالی بود
مرسی عالی بود دمتون گرم.