ที่นี่เราจะดูว่าการมอบหมายคอนสตรัคคืออะไร? เมื่อ Constructor เรียก Constructor อื่นในคลาสเดียวกัน จะถูกเรียกว่า Constructor Delegation คุณลักษณะนี้มีอยู่ใน C++11
ให้เราดูโปรแกรมต่อไปนี้ และลองวิเคราะห์ว่าโค้ดนี้มีปัญหาอะไรบ้าง
ตัวอย่าง
#include <iostream>
using namespace std;
class MyClass {
int a, b, c;
public:
MyClass(){
a = b = c = 0;
}
MyClass(int c) {
// Initializing a and b are redundent, only c initialization is needed here
a = 0;
b = 0;
this->c = c;
}
void display(){
cout << "a : " << a << ", b : " << b << ", c : " << c;
}
};
main() {
MyClass my_obj(5);
my_obj.display();
} ผลลัพธ์
a : 0, b : 0, c : 5
ที่นี่เราจะเห็นว่ารหัสทำงานได้ดี แต่มีรหัสซ้ำซ้อนอยู่บ้าง คอนสตรัคเตอร์ที่ไม่มีพารามิเตอร์สามารถตั้งค่าของ a และ b เป็น 1 ได้ ดังนั้นหากเราใช้คอนสตรัคเตอร์ตัวแรกในคอนสตรัคเตอร์ตัวที่สอง มันจะมีประสิทธิภาพมากขึ้น ด้วยเหตุนี้ เราจึงต้องใช้วิธีที่เรียกว่า Constructor delegation
ตัวอย่าง
#include <iostream>
using namespace std;
class MyClass {
int a, b, c;
public:
MyClass(){
a = b = c = 0;
}
MyClass(int c) : MyClass(){ //using constructor delegation
this->c = c;
}
void display(){
cout << "a : " << a << ", b : " << b << ", c : " << c;
}
};
main() {
MyClass my_obj(5);
my_obj.display();
} ผลลัพธ์
a : 0, b : 0, c : 5