7.2 การสร้าง Constructor เพื่อเตรียมค่าพื้นฐาน
7.2 การสร้าง Constructor เพื่อเตรียมค่าพื้นฐาน
การสร้าง Constructor เพื่อเตรียมค่าพื้นฐาน เป็นขั้นตอนสำคัญในการพัฒนาโปรแกรมเชิงวัตถุ (Object-Oriented Programming) ที่ช่วยให้วัตถุ (object) มีสถานะเริ่มต้นที่พร้อมใช้งาน โดยค่าพื้นฐานเหล่านี้จะถูกตั้งค่าให้กับคุณสมบัติ (attributes) หรือสถานะต่าง ๆ ของวัตถุทันทีที่วัตถุถูกสร้างขึ้น ทำให้ไม่ต้องตั้งค่าเหล่านี้ทุกครั้งที่เรียกใช้งานวัตถุ การเตรียมค่าพื้นฐานด้วย Constructor ยังช่วยลดข้อผิดพลาดที่อาจเกิดขึ้นหากลืมตั้งค่าเริ่มต้นก่อนการใช้งาน
สร้างวัตถุที่พร้อมใช้งาน : การเตรียมค่าพื้นฐานทำให้วัตถุอยู่ในสถานะที่พร้อมใช้งานได้ทันที โดยไม่ต้องมีการตั้งค่าเพิ่มเติม ทำให้โค้ดมีความเรียบง่ายและไม่ต้องกังวลเรื่องสถานะที่ยังไม่ได้ตั้งค่า
ลดความซับซ้อนและข้อผิดพลาด : การตั้งค่าเริ่มต้นใน Constructor ช่วยลดโอกาสที่จะเกิดข้อผิดพลาดจากการลืมตั้งค่าบางค่าไว้ และทำให้โค้ดสั้นลง เพราะไม่จำเป็นต้องมีการกำหนดค่าเริ่มต้นทุกครั้งที่ใช้งานวัตถุใหม่
ทำให้โค้ดอ่านง่ายและดูเป็นระบบ : Constructor ช่วยให้การตั้งค่าพื้นฐานรวมอยู่ในที่เดียวกัน ซึ่งทำให้โค้ดอ่านง่ายและเข้าใจได้ว่าเมื่อสร้างวัตถุขึ้น ค่าต่าง ๆ จะถูกตั้งค่าอย่างไรในทันที
ในการสร้าง Constructor เพื่อตั้งค่าพื้นฐานนั้น เราจะเขียนฟังก์ชันพิเศษภายในคลาสที่มีชื่อเดียวกันกับคลาสและไม่มีประเภทการคืนค่า (ไม่มี return type) ซึ่งค่าพื้นฐานที่เตรียมไว้จะถูกส่งเข้ามาทางพารามิเตอร์ของ Constructor เพื่อให้สามารถกำหนดค่าให้กับคุณสมบัติในวัตถุได้ตามที่ต้องการ
ตัวอย่างเช่น ในระบบห้องสมุด เราอาจมีคลาสที่ชื่อ Book ที่เก็บข้อมูลเกี่ยวกับหนังสือ เช่น ชื่อหนังสือ ชื่อผู้เขียน และจำนวนหน้า และเราสามารถใช้ Constructor เพื่อเตรียมค่าพื้นฐานเหล่านี้ได้
ตัวอย่าง การสร้าง Constructor เพื่อเตรียมค่าพื้นฐาน
#include <iostream>
#include <string>
using namespace std;
class Book {
private:
string title; // ชื่อหนังสือ
string author; // ชื่อผู้เขียน
int pages; // จำนวนหน้า
double price; // ราคาหนังสือ
public:
// Constructor เพื่อเตรียมค่าพื้นฐาน
Book(string t, string a, int p, double pr)
: title(t), author(a), pages(p), price(pr) {
cout << "Creating book: " << title << " by " << author << endl;
cout << "Pages: " << pages << ", Price: $" << price << endl;
}
// ฟังก์ชันแสดงข้อมูลของหนังสือ
void display() const {
cout << "Title: " << title << ", Author: " << author << endl;
cout << "Pages: " << pages << ", Price: $" << price << endl;
}
};
int main() {
// เรียกใช้ Constructor เพื่อสร้างหนังสือโดยกำหนดค่าพื้นฐาน
Book book1("Object-Oriented Programming", "John Doe", 300, 39.99);
book1.display(); // เรียกใช้ฟังก์ชัน display เพื่อแสดงข้อมูลของหนังสือ
return 0;
}
ในโค้ดด้านบน:
เมื่อสร้างวัตถุ book1 ของคลาส Book ขึ้นมา Constructor จะถูกเรียกใช้และกำหนดค่าพื้นฐานให้กับคุณสมบัติ title, author, pages และ price ของหนังสือ
Constructor จะใช้ initializer list เพื่อกำหนดค่าให้กับตัวแปรเหล่านี้ ซึ่งช่วยให้โค้ดมีความเรียบง่ายและกระชับ
ฟังก์ชัน display() จะถูกใช้เพื่อแสดงข้อมูลของหนังสือว่าเป็นไปตามที่กำหนดไว้หรือไม่
ในบางกรณี อาจต้องการให้ค่าเริ่มต้นของวัตถุบางส่วนเป็นค่าที่กำหนดไว้ล่วงหน้าโดยไม่ต้องส่งเข้ามาผ่านพารามิเตอร์ เช่น หากต้องการให้ราคาหนังสือมีค่าเริ่มต้นเป็น $10.00 หากไม่ได้ระบุราคา ก็สามารถใช้ Constructor แบบที่มีค่าเริ่มต้นได้ ดังนี้:
#include <iostream>
#include <string>
using namespace std;
class Book {
private:
string title;
string author;
int pages;
double price;
public :
// Constructor มีค่าเริ่มต้นที่ราคาหนังสือ
Book(string t, string a, int p, double pr = 10.00)
: title(t), author(a), pages(p), price(pr) {
cout << "Creating book: " << title << " by " << author << endl;
cout << "Pages: " << pages << ", Price: $" << price << endl;
}
void display() const {
cout << "Title: " << title << ", Author: " << author << endl;
cout << "Pages: " << pages << ", Price: $" << price << endl;
}
};
int main() {
Book book1("Object-Oriented Programming", "John Doe", 300); // ไม่ระบุราคา ค่าเริ่มต้นคือ $10.00
book1.display();
Book book2("Advanced C++ Programming", "Jane Smith", 500, 49.99); // ระบุราคาตามที่ต้องการ
book2.display();
return 0;
}
ในโค้ดด้านบน:
Constructor จะมีค่าเริ่มต้นของ price เป็น $10.00 หากไม่มีการกำหนดค่าใหม่
วัตถุ book1 จะมีราคาหนังสือเป็น $10.00 เพราะไม่ได้กำหนดค่า price ขณะที่ book2 จะมีราคาหนังสือเป็น $49.99 ตามที่กำหนดไว้ในพารามิเตอร์ของ Constructor
การใช้ Constructor เพื่อเตรียมค่าพื้นฐานในการสร้างวัตถุมีประโยชน์อย่างมากในแง่ของการทำให้วัตถุมีสถานะที่พร้อมใช้งานและลดความซับซ้อนในการเขียนโค้ด โดย:
Constructor ช่วยให้การตั้งค่าเริ่มต้นเป็นไปโดยอัตโนมัติ ทำให้ไม่ต้องตั้งค่าใหม่ทุกครั้งที่มีการสร้างวัตถุ
เพิ่มประสิทธิภาพในการจัดการทรัพยากร โดยเฉพาะในกรณีที่วัตถุต้องการทรัพยากรหรือสถานะที่พร้อมทำงานทันทีที่ถูกสร้าง
ทำให้โค้ดเป็นระเบียบและอ่านง่าย ช่วยลดข้อผิดพลาดที่อาจเกิดขึ้นจากการลืมตั้งค่าพื้นฐาน