ที่นี่เราจะดูว่าการมอบหมายคอนสตรัคคืออะไร? เมื่อ 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