Class Contructor trong C++
Một class contructor là một hàm thành viên đặc biệt của một lớp mà được thực thi bất cứ khi nào chúng ta tạo các đối tượng mới của lớp đó.
Một constructor sẽ có tên giống như lớp và nó không có bất kỳ kiểu trả về, kể cả kiểu void. Constructor có thể rất hữu ích để thiết lập các giá trị khởi tạo cho các biến thành viên cụ thể.
Ví dụ sau giải thích khái niệm contructor trong C++:
#include <iostream> using namespace std; class Line { public: void setChieuDai( double dai ); double layChieuDai( void ); Line(); // Day la constructor private: double chieudai; }; // phan dinh nghia cac ham thanh vien, bao gom ca constructor Line::Line(void) { cout << "Doi tuong da duoc tao!" << endl; } void Line::setChieuDai( double dai ) { chieudai = dai; } double Line::layChieuDai( void ) { return chieudai; } // Ham main cua chuong trinh int main( ) { Line line; // thiet lap chieu dai cua line line.setChieuDai(6.0); cout << "Chieu dai cua duong la: " << line.layChieuDai() <<endl; return 0; }
Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:
Constructor được tham số hóa trong C++
Một constructor mặc định trong C++ không có bất kỳ tham số nào, nhưng nếu bạn cần, một constructor có thể có các tham số. Điều này giúp bạn gán giá trị khởi tạo tới một đối tượng tại thời điểm tạo nó, như trong ví dụ sau:
#include <iostream> using namespace std; class Line { public: void setChieuDai( double dai ); double layChieuDai( void ); Line(double dai); // Day la phan khai bao constructor private: double chieudai; }; // phan dinh nghia cac ham thanh vien, bao gom constructor Line::Line( double dai) { cout << "Doi tuong dang duoc tao, chieudai = " << dai << endl; chieudai = dai; } void Line::setChieuDai( double dai ) { chieudai = dai; } double Line::layChieuDai( void ) { return chieudai; } // ham main cua chuong trinh int main( ) { Line line(10.0); // lay chieu dai da duoc khoi tao ban dau. cout << "Chieu dai cua line la: " << line.layChieuDai() <<endl; // thiet lap chieu dai mot lan nua line.setChieuDai(6.0); cout << "Chieu dai cua line la: " << line.layChieuDai() <<endl; return 0; }
Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:
Sử dụng danh sách khởi tạo cho các trường khởi tạo
Trong trường hợp constructor được tham số hóa, bạn có thể sử dụng cú pháp sau để khởi tạo các trường.
Line::Line( double dai): chieudai(dai) { cout << "Doi tuong dang duoc tao, chieudai = " << dai << endl; }
Cú pháp trên là tương đương với cú pháp sau:
Line::Line( double dai) { cout << "Doi tuong dang duoc tao, chieudai = " << dai << endl; chieudai = dai; }
Nếu với một lớp trong C, bạn có nhiều trường X, Y, Z,… để được khởi tạo, thì bạn có thể sử dụng cú pháp tương tự và phân biệt các trường bởi dấu phảy, như sau:
C::C( double a, double b, double c): X(a), Y(b), Z(c) { .... }
Class Destructor trong C++
Một destructor là một hàm thành viên đặc biệt của một lớp mà được thực thi bất cứ khi nào một đối tượng của lớp đó ra khỏi phạm vi hoặc bất cứ khi nào biểu thức delete được áp dụng tới một con trỏ tới đối tượng của lớp đó.
Một destructor sẽ có cùng tên với lớp và được đặt trước bỏi ký hiệu ~ và nó có thể: không trả về một giá trị và không nhận bất kỳ tham số nào. Destructor có thể rất hữu ích để giải phóng resource trước khi thoát khỏi chương trình, ví dụ: đóng file, giải phóng bộ nhớ…
Ví dụ sau giải thích khái niệm về destructor trong C++:
#include <iostream> using namespace std; class Line { public: void setChieuDai( double dai ); double layChieuDai( void ); Line(); // Day la phan khai bao constructor ~Line(); // Day la phan khai bao destructor private: double chieudai; }; // phan dinh nghia ham thanh vien, bao gom constructor va destructor Line::Line(void) { cout << "Doi tuong dang duoc tao" << endl; } Line::~Line(void) { cout << "Doi tuong dang bi xoa!" << endl; } void Line::setChieuDai( double dai ) { chieudai = dai; } double Line::layChieuDai( void ) { return chieudai; } // ham main cua chuong trinh int main( ) { Line line; // Thiet lap chieu dai cua line line.setChieuDai(6.0); cout << "Chieu dai cua line la: " << line.layChieuDai() <<endl; return 0; }
Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau:
Theo Tutorialspoint
Bài trước: Access Modifier cho lớp trong C++
Bài tiếp: Copy constructor trong C++