Trong C++, hàm tạo là một phương thức đặc biệt được gọi tự động tại thời điểm tạo đối tượng. Nó được sử dụng để khởi tạo các thành viên dữ liệu của đối tượng mới nói chung. Hàm tạo trong C++ có cùng tên với class hoặc structure.
Tóm lại, một thủ tục cụ thể được gọi là hàm tạo được gọi tự động khi một đối tượng được tạo trong C ++. Nói chung, nó được sử dụng để tạo ra các thành viên dữ liệu của những thứ mới. Trong C++, tên lớp hoặc cấu trúc cũng đóng vai trò là tên hàm tạo. Khi một đối tượng được hoàn thành, hàm xây dựng được gọi. Bởi vì nó tạo ra các giá trị hoặc cung cấp dữ liệu cho sự vật, nó được gọi là hàm tạo.
Nguyên mẫu Constructors trông như thế này:
- <tên lớp> (danh sách các tham số);
Cú pháp sau đây được sử dụng để định nghĩa hàm tạo của lớp:
- <class-name> (danh sách tham số) { // định nghĩa hàm tạo }
Cú pháp sau đây được sử dụng để định nghĩa hàm tạo bên ngoài lớp:
- <class-name>: :<class-name> (list-of-parameters){ // định nghĩa hàm tạo}
Các hàm tạo thiếu kiểu trả về vì chúng không có giá trị trả về.
Có thể có hai loại hàm xây dựng trong C ++.
- Hàm tạo mặc định
- Xây dựng tham số
C++ Xây dựng mặc định
Một hàm tạo không có đối số được gọi là hàm tạo mặc định. Nó được gọi tại thời điểm tạo đối tượng.
Hãy xem ví dụ đơn giản về C++ default Constructor.
- #include <iostream>
- sử dụng không gian tên std;
- nhân viên lớp
- {
- Công khai:
- Nhân viên()
- {
- cout<<“Default Constructor Invooked”<<endl;
- }
- };
- int main(void)
- {
- Nhân viên e1; //tạo một đối tượng của Employee
- Nhân viên e2;
- trả về 0;
- }
Ra:
Default Constructor Invoked Default Constructor Invoked
C++ Parameterized Constructor
Một hàm tạo có các tham số được gọi là hàm tạo tham số. Nó được sử dụng để cung cấp các giá trị khác nhau cho các đối tượng riêng biệt.
Hãy xem ví dụ đơn giản về C++ Parameterized Constructor.
- #include <iostream>
- sử dụng không gian tên std;
- lớp Nhân viên {
- Công khai:
- ID int;//data member (cũng là biến phiên bản)
- tên chuỗi; //data member(cũng là biến phiên bản)
- lương thả nổi;
- Employee(int i, string n, float s)
- {
- id = i;
- tên = n;
- lương = s;
- }
- void display()
- {
- cout<<id<<” “<<tên<<” “<<lương<<endl;
- }
- };
- int main(void) {
- Nhân viên e1 = Nhân viên (101, “Sonoo”, 890000); //tạo một đối tượng của Employee
- Nhân viên e2 = Nhân viên (102, “Nakul”, 59000);
- e1.hiển thị();
- e2.hiển thị();
- trả về 0;
- }
Ra:
101 Sonoo 890000 102 Nakul 59000
Điều gì phân biệt hàm xây dựng với một chức năng thành viên điển hình?
- Tên của hàm tạo giống với tên của lớp
- Mặc định Không có đối số đầu vào cho hàm tạo. Tuy nhiên, các đối số đầu vào có sẵn cho các hàm tạo sao chép và tham số.
- Không có kiểu trả về cho các nhà xây dựng.
- Hàm tạo của một đối tượng được gọi tự động khi tạo.
- Nó phải được hiển thị trong khu vực mở của lớp học.
- Trình biên dịch C++ tạo ra một hàm tạo mặc định cho đối tượng nếu hàm tạo không được chỉ định (mong đợi bất kỳ tham số nào và có phần thân trống).
Bằng cách sử dụng một ví dụ thực tế, chúng ta hãy tìm hiểu về các loại hàm tạo khác nhau trong C ++. Hãy tưởng tượng bạn ghé thăm một cửa hàng để mua một điểm đánh dấu. Lựa chọn thay thế của bạn là gì nếu bạn muốn mua một điểm đánh dấu? Đối với lần đầu tiên, bạn yêu cầu cửa hàng cung cấp cho bạn một điểm đánh dấu, với điều kiện bạn không chỉ định tên thương hiệu hoặc màu sắc của điểm đánh dấu bạn muốn, chỉ yêu cầu một số tiền cho yêu cầu. Vì vậy, khi chúng tôi chỉ nói, “Tôi chỉ cần một điểm đánh dấu”, anh ấy sẽ đưa cho chúng tôi bất cứ điểm đánh dấu phổ biến nhất nào trên thị trường hoặc cửa hàng của anh ấy. Hàm tạo mặc định chính xác như âm thanh của nó! Cách tiếp cận thứ hai là đi vào một cửa hàng và chỉ định rằng bạn muốn một điểm đánh dấu màu đỏ của thương hiệu XYZ. Anh ấy sẽ đưa cho bạn điểm đánh dấu đó vì bạn đã đưa ra chủ đề. Do đó, các tham số đã được đặt trong trường hợp này. Và một hàm tạo tham số chính xác là những gì nó nghe giống như! Cái thứ ba yêu cầu bạn ghé thăm một cửa hàng và tuyên bố rằng bạn muốn một điểm đánh dấu trông như thế này (một điểm đánh dấu vật lý trên tay bạn). Do đó, chủ cửa hàng sẽ nhận thấy điểm đánh dấu đó. Anh ấy sẽ cung cấp cho bạn một điểm đánh dấu mới khi bạn nói đúng. Do đó, hãy tạo một bản sao của điểm đánh dấu đó. Và đó là những gì một hàm tạo bản sao làm!
Các đặc điểm của một hàm xây dựng là gì?
- Hàm tạo có cùng tên với lớp mà nó thuộc về.
- Mặc dù có thể, các hàm xây dựng thường được khai báo trong phần công khai của lớp. Tuy nhiên, đây không phải là điều bắt buộc.
- Bởi vì hàm tạo không trả về giá trị, chúng thiếu kiểu trả về.
- Khi chúng ta tạo một đối tượng lớp, hàm tạo ngay lập tức được gọi.
- Các nhà xây dựng quá tải là có thể.
- Không được phép khai báo một hàm tạo ảo.
- Người ta không thể kế thừa một hàm tạo.
- Địa chỉ hàm tạo không thể được tham chiếu đến.
- Khi phân bổ bộ nhớ, hàm tạo thực hiện các cuộc gọi ngầm đến các toán tử mới và xóa.
Hàm tạo bản sao là gì?
Một hàm thành viên được gọi là hàm tạo bản sao khởi tạo một mục bằng cách sử dụng một đối tượng khác từ cùng một lớp – một cuộc thảo luận chuyên sâu về Copy Constructor.
Mỗi khi chúng ta chỉ định một hoặc nhiều hàm tạo không mặc định (với các tham số) cho một lớp, chúng ta cũng cần bao gồm một hàm tạo mặc định (không có tham số), vì trình biên dịch sẽ không cung cấp một hàm trong trường hợp này. Cách tốt nhất là luôn khai báo một hàm tạo mặc định, mặc dù nó không bắt buộc.
Một tham chiếu đến một đối tượng thuộc cùng một lớp được yêu cầu bởi hàm tạo bản sao.
- Mẫu (Mẫu &t)
- {
- id = t.id;
- }
Trình hủy trong C ++ là gì?
Một hàm thành viên đặc biệt tương đương với hàm tạo là một hàm hủy. Hàm tạo tạo ra các đối tượng lớp, bị phá hủy bởi kẻ hủy diệt. Từ “destructor”, theo sau là ký hiệu dấu ngã (), giống như tên lớp. Bạn chỉ có thể xác định một trình hủy diệt tại một thời điểm. Một phương pháp phá hủy một đối tượng được tạo ra bởi một nhà xây dựng là sử dụng một chất hủy diệt. Do đó, các thiết bị phá hủy không thể bị quá tải. Những kẻ hủy diệt không lấy bất kỳ lý lẽ nào và không trả lại bất cứ điều gì. Ngay khi mục rời khỏi phạm vi, nó sẽ được gọi ngay lập tức. Bộ hủy giải phóng bộ nhớ được sử dụng bởi các đối tượng mà hàm tạo tạo ra. Destructor đảo ngược quá trình tạo ra mọi thứ bằng cách phá hủy chúng.
Ngôn ngữ được sử dụng để định nghĩa kẻ hủy diệt của lớp
- ~ <class-name>()
- {
- }
Ngôn ngữ được sử dụng để định nghĩa kẻ hủy diệt của lớp bên ngoài nó
- <class-name>: : ~ <class-name>(){}