lập trình hướng đối tượng c++

Chúng tớ đã và đang được biết về lớp, đối tượng người sử dụng và những cơ hội xác lập hàm ở bài xích trước. Trong bài xích này bản thân tiếp tục dò la hiểu về hàm khởi tạo ra và hàm bỏ vô C++ là gì và không giống gì đối với những hàm thường thì nhé.

Bài viết lách tiếp tục dùng C++ là ngữ điệu chủ yếu nhằm lý giải và code minh họa mang lại OOP nên tất cả chúng ta cần thiết nắm rõ một đặc điểm của C++ vô lập trình sẵn phía đối tượng người sử dụng.

Bạn đang xem: lập trình hướng đối tượng c++

1. Hàm khởi tạo ra (Constructor):

Hàm khởi tạo ra (constructor) là một trong công thức quan trọng đặc biệt được gọi tự động hóa bên trên thời khắc đối tượng người sử dụng được tạo ra. Mục đích của hàm khởi tạo là nhằm khởi tạo ra những member tài liệu của đối tượng người sử dụng.

Một hàm khởi tạo tiếp tục không giống những hàm thường thì ở những điểm sau:

  • Có thương hiệu trùng với thương hiệu lớp
  • Không đem loại tài liệu trả về ( bao gồm kiểu void)
  • Tự động được gọi Khi một đối tượng người sử dụng nằm trong lớp được tạo ra ra
  • Nếu tất cả chúng ta ko khai báo một hàm khởi tạo, trình biên dịch C++ tiếp tục tự động hóa tạo ra một hàm khởi tạo đem tấp tểnh mang lại tất cả chúng ta (sẽ là hàm ​​không đem thông số nào là và đem phần đằm thắm trống).

Ví dụ tớ đem lớp Mayvitinh đem 2 tính chất là chieudaimausac, thì hàm khởi tạo hoàn toàn có thể khái niệm mang lại lớp Mayvitinh như sau:

class Mayvitinh{
    int chieudai;
    string mausac;
    public:
        Mayvitinh();                   // Đây là hàm khởi tạo
        Mayvitinh(int cd) {
            chieudai = cd;
        }
        Mayvitinh(string ms) {         // Đây là hàm khởi tạo
            mausac = ms;
        }
        Mayvitinh(int cd, string ms) { // Đây là hàm khởi tạo
            chieudai = cd;
            mausac = ms;
        }
};

Hàm khởi tạo về cơ phiên bản sẽ tiến hành chia thành 3 loại:

  1. Hàm khởi tạo ra ko thông số (Cũng hoàn toàn có thể gọi là hàm tạo ra đem tấp tểnh – Default Constructor)
  2. Hàm khởi tạo ra đem thông số (Parameterized Constructor)
  3. Hàm khởi tạo ra sao chép (Copy Constructor)

1.1. Hàm khởi tạo ra ko thông số (Default Constructor):

Mình lấy một ví dụ:

#include <iostream>  
using namespace std;  
class Mayvitinh {  
   public:  
        Mayvitinh() {    
            cout << "Ham khoi tao tu dong duoc goi." << endl;    
        }    
};  
 
int main() {  
    Mayvitinh mayAsus;     //khởi tạo ra đối tượng người sử dụng mayAsus
    Mayvitinh mayAcer;     //khởi tạo ra đối tượng người sử dụng mayAcer
    return 0;  
}

Khi chạy lịch trình tớ sẽ sở hữu thành phẩm như sau:

Trong ví dụ bên trên, hàm tạo ra Mayvitinh() không hề đem đối số nào là được truyền vô. 

1.2. Hàm khởi tạo ra đem thông số (Parameterized Constructor):

Với loại hàm tạo ra này tớ hoàn toàn có thể truyền đối số mang lại bọn chúng. Thông thông thường, những đối số này chung khởi tạo ra một đối tượng người sử dụng Khi nó được tạo ra.

Để khai báo một hàm khởi tạo ra đem thông số chỉ việc thêm thắt những thông số vô nó tương tự như cơ hội chúng ta thêm thắt thông số ngẫu nhiên hàm nào là không giống. Khi chúng ta xác lập phần đằm thắm của hàm tạo ra, hãy dùng những thông số nhằm khởi tạo ra đối tượng người sử dụng.

Chúng tớ nằm trong kiểm tra một ví dụ đơn giản và giản dị về hàm khởi tạo ra đem tham ô số vô C++ như sau:

#include <iostream>  
using namespace std;  
class Mayvitinh { 
    int chieurong;   
    int chieudai; 
    string tenmay;
    public:  
       Mayvitinh(int cd) {    
            chieudai = cd;
       }
       Mayvitinh(int cd, string tm) {    
            chieudai = cd;    
            tenmay = tm;
            chieurong = 20;
       }
       Mayvitinh(int cd, string tm, int cr) {    
            chieudai = cd;    
            tenmay = tm;    
            chieurong = cr; 
       }    
       void HienThi() {    
            cout << tenmay << endl;
            cout << "   Chieu dai: " << chieudai << endl;
            cout << "   Chieu rong: " << chieurong << endl;
       }    
};  
  
int main() {  
    Mayvitinh mayAsus =  Mayvitinh(50, "may Asus", 25);    
    Mayvitinh mayAcer =  Mayvitinh(45, "mau Acer");
    Mayvitinh mayMac =  Mayvitinh(30, "may Mac");
    mayAsus.HienThi();    
    mayAcer.HienThi();
    mayMac.HienThi();
    return 0;  
}

Sau Khi chạy lịch trình tớ sẽ sở hữu kết quả:

Lưu ý:

  • Khi một đối tượng người sử dụng được khai báo vô hàm khởi tạo ra đem thông số, những độ quý hiếm lúc đầu cần được truyền bên dưới dạng đối số mang lại hàm tạo ra.
  • Các hàm khởi tạo ra hoàn toàn có thể được gọi một cơ hội rõ nét hoặc ngầm tấp tểnh.
Mayvitinh mayAcer = Mayvitinh("may Acer", 25); // Đây là cơ hội rõ rệt ràng
Mayvitinh mayAcer("May Acer", 25);             // Đây là cơ hội ngầm định

Công dụng của hàm khởi tạo ra đem tham ô số

  • Khởi tạo ra những bộ phận tài liệu không giống nhau của những đối tượng người sử dụng không giống nhau với những độ quý hiếm không giống nhau Khi bọn chúng được tạo ra.
  • Nạp ck những hàm khởi tạo ra. (Có thế chúng ta không hiểu nhiều "nạp chồng" là gì cần không? Nói nôm na là tớ sẽ sở hữu nhiều hơn thế nữa một hàm khởi tạo ra vô và một lớp. Mình tiếp tục lý giải rõ rệt rộng lớn về yếu tố này ở bài xích sau, chúng ta lưu giữ đón coi nhé.)

1.3. Hàm khởi tạo ra sao chép (Copy Constructor):

Hàm khởi tạo ra sao chép (Copy Constructor) là một hàm xây cất được dùng nhằm khai báo và khởi tạo ra một đối tượng người sử dụng từ là một đối tượng người sử dụng không giống.

Cú pháp của hàm khởi tạo ra sao chép (Copy Constructor) như sau:

ClassName(const ClassName &old_obj){
    // Code
}

Trong đó Classname là thương hiệu của lớp, old_obj là đối tượng người sử dụng cũ tiếp tục lấy thực hiện gốc nhằm sao chép quý phái đối tượng người sử dụng mới mẻ.

Xem thêm: Bí quyết nướng khoai chảy đầy mật

Chúng tớ lấy ví dụ đơn giản và giản dị về hàm khởi tạo ra sao chép nhé:

#include <iostream>  
using namespace std;  
class Mayvitinh { 
    int chieurong;   
    int chieudai; 
    string tenmay;
    public:  
       Mayvitinh(int cd, string tm, int cr) {    
            chieudai = cd;    
            tenmay = tm;    
            chieurong = cr; 
       }    
       Mayvitinh(Mayvitinh &m) {
           tenmay = m.tenmay;
           chieudai = m.chieudai;
           chieurong = m.chieurong;
       }
       void HienThi() {    
            cout << tenmay << endl;
            cout << "   Chieu dai: " << chieudai << endl;
            cout << "   Chieu rong: " << chieurong << endl;
       }    
};  
  
int main() {  
    Mayvitinh mayAsus(50, "may Asus", 25);    
    Mayvitinh mayAcer(mayAsus);
    mayAsus.HienThi();    
    mayAcer.HienThi();
    return 0;  
}

Và thành phẩm sau thời điểm thực ganh đua lịch trình bên trên như sau:

Hàm khởi tạo ra sao chép (Copy Constructor) được gọi trong số tình huống sau đây:

  • Khi một đối tượng người sử dụng của lớp được trả về vì thế một độ quý hiếm.
  • Khi một đối tượng người sử dụng của lớp được truyền đối số bên dưới dạng thông số của một hàm.
  • Khi một đối tượng người sử dụng được đưa đến dựa vào một đối tượng người sử dụng không giống nằm trong lớp.

Ví dụ: Mayvitinh mayAcer = mayAsus

  • Khi trình biên dịch tạo ra một đối tượng người sử dụng trong thời điểm tạm thời.

Lưu ý:

Bất cứ lúc nào tất cả chúng ta khái niệm một hoặc nhiều hàm tạo ra đem thông số cho 1 lớp, hàm tạo ra đem tấp tểnh (không đem tham ô số) cũng cần được xác lập rõ nét vì như thế trình biên dịch sẽ không còn cung ứng hàm tạo ra đem tấp tểnh vô tình huống này. Điều ê tuy rằng ko quan trọng tuy nhiên nó được xem là cơ hội cực tốt nhằm luôn luôn xác lập một hàm tạo ra đem tấp tểnh.

2. Hàm bỏ (Desconstructor):

Hàm bỏ (Destructorngược lại với hàm khởi tạo, trong những lúc hàm khởi tạo ra dùng để làm khởi tạo ra độ quý hiếm mang lại đối tượng người sử dụng thì hàm hủy dùng để làm bỏ đối tượng người sử dụng.

Chỉ đem có một không hai một hàm hủy vô một tờ. Hàm hủy tự động hóa được gọi. Nếu như tất cả chúng ta ko khái niệm hàm hủy thì đem định trình biên dịch tiếp tục tự động đưa đến một hàm hủy đem nhiên.

Cũng tương tự như hàm xây cất, hàm hủy được khái niệm đem nằm trong thương hiệu với thương hiệu lớp, khôn ngoan đem bất kể loại gì trả về kể cẳ loại void, song cần đem vệt ~ trước thương hiệu của hàm hủy.

Cú pháp của hàm bỏ (Destructor) như sau:

~Classname() { };

Chúng tớ nằm trong kiểm tra một ví dụ đơn giản và giản dị nhất về hàm hủy như sau:

#include <iostream>  
using namespace std;  
class Mayvitinh  {  
   public:  
        Mayvitinh() {    
            cout << "Ham khoi tao duoc goi" << endl;    
        }    
        ~Mayvitinh() {    
            cout << "Ham huy duoc goi" << endl;    
        }  
};  
int main() {  
    Mayvitinh mayAsus;   
    Mayvitinh mayAcer; 
    return 0;  
}

Và sau thời điểm chạy lịch trình sẽ sở hữu thành phẩm như sau: 

Như vô code bên trên, tớ hoàn toàn có thể thấy hàm bỏ (Destructor) sẽ được gọi tự động hóa Khi đối tượng người sử dụng chuồn thoát ra khỏi phạm vi:

  • Kết giục hàm
  • Kết giục chương trình
  • Kết giục một block
  • Toán tử delete được gọi

Và đem nhị giới hạn Khi dùng hàm hủy ê là:

  • Chúng tớ ko thể lấy địa điểm của nó
  • Lớp con cái không tồn tại quá tiếp hàm hủy kể từ lớp phụ thân của nó

Với C++ thì nếu như tớ ko khai báo một hàm hủy, trình biên dịch cũng tiếp tục tự động khái niệm một hàm hủy. Thông thông thường thì hàm hủy này hoạt động và sinh hoạt tương đối tốt, tuy nhiên Khi việc đem dùng con cái trỏ, hoặc cấp phép bộ nhớ lưu trữ động thì ban nên khai báo một hàm huỷ riêng biệt nhằm rời rỏ rỉ bộ nhớ lưu trữ.

Xem thêm: Năm 2024 những tuổi nào làm nhà được?

Tạm kết

Như vậy là tất cả chúng ta tiếp tục dò la hiểu xong xuôi hàm khởi tạo ra (Constructor) và hàm bỏ (Destructor), nhị hàm này tiếp tục nối liền xuyên thấu vô OOP.

Mình tiếp tục kết giục bài xích này bên trên trên đây. Các chúng ta có thể rate và comment chung ý ở bên dưới nếu như thấy bất kể điều gì ko đúng mực nhằm những bài xích sau đảm bảo chất lượng rộng lớn.

Cảm ơn chúng ta tiếp tục dành riêng thời hạn theo dõi dõi.