Dấu 2 chấm trong cpp có ý nghĩa gì?

Dấu 2 chấm trong dòng NhanVienSanXuat() : NhanVien() có ý nghĩa gì vậy ạ.cảm ơn.

class NhanVienSanXuat : public NhanVien
{
private:
    int soSanPham;
    float tienCong1SP;

public:
    NhanVienSanXuat() : NhanVien()
    {
        this->soSanPham = 0;
        this->tienCong1SP = 0;
    }

    void nhap()
    {
        NhanVien::nhap();
        cout << "So san pham: ";
        cin >> this->soSanPham;
        cout << "Tien cong 1 san pham: ";
        cin >> this->tienCong1SP;
    }

    void xuat()
    {
        cout << "So san pham: ";
        cout << this->soSanPham << endl;
        cout << "Tien cong 1 san pham: ";
        cout << this->tienCong1SP << endl;
        cout << "Luong: ";
        cout << this->luong << endl;
    }

    void tinhLuong()
    {
        this->luong = this->soSanPham * this->tienCong1SP;
    }
};
1 Like

đây là kế thừa, b học đến hướng đối tượng và 4 tính chất của nó chưa?

5 Likes

Nhưng NhanVien là constructor mà đâu phải class

Cú pháp để khai báo một lớp kế thừa từ một lớp như sau:

class <tên_class_con> : <phạm_vi_truy_cập> <tên_class_cha>
{
    // code goes here
};

Trong đó, class cha và class con đã được trình bày ở bên trên, phạm vi truy cập sẽ được mình trình bày ngay bến dưới.

Giả sử mình có một class A với các thuộc tính, phương thức bên trong. Mình muốn khai báo một class B kế thừa từ class A, mình sẽ có cú pháp như sau:

class B : public/private/protected A
{
    // code goes here
};

Khi này, các thuộc tính trong class A sẽ được class B kế thừa. public/private/protected là phạm vi truy cập của các thuộc tính sẽ được kế thừa. Hãy cùng tìm hiểu xem cụ thể phạm vi truy cập là như thế nào ngay bên dưới.

Mình cũng ko làm C++ nhưng đọc thấy cú pháp giống.

2 Likes

3 Likes

Dấu : chứ k phải dấu :: a ơi

Không liên quan nhưng mình tự hỏi tại sao code lại thành như thế này được nhỉ. Trong khi format code trên DNH là phải đặt trong cặp ba dấu huyền.

Gọi đến hàm dựng mặc định hoặc hàm dựng có tham số của lớp cha.
Giả sử lớp NhanVien còn 1 hàm dựng nữa, có tham số là string tenNV như này:

class NhanVien{
    // blah ...
   NhanVien(string tenNV){
       this->ten = tenNV;
   }
   // ...blah
};
class NhanVienSanXuat : public NhanVien{
    // blah...
    // hàm dựng dưới đây sẽ gọi đến hàm dựng NhanVien(string) của lớp cha.
    NhanVienSanXuat(string tenNVSX, float heSo) : NhanVien(tenNVSX){
        this->heSo = heSo;
    }
    // ...blah
};

Không nhất thiết là phải 3 dấu huyền, nếu đoạn văn bản có 4 dấu cách (hoặc 1 tab) đầu dòng thì discourse vẫn tự chuyển về dạng monospace (mã - code).

Đoạn này có 4 dấu cách ở đầu dòng.
    Đoạn này có 8 dấu cách ở đầu dòng.
	Đoạn này có 2 dấu tab ở đầu dòng.
5 Likes

dấu 2 chấm trong c++ thường dùng để là truy cập thành viên static. Ở trường trường hợp này nó gọi phương thức kế thừa tương tự super trong java

3 Likes

Static thì cũng vẫn 4 chấm thôi :smiley:

Phần sau dấu : bao gồm lệnh gọi constructor của superclass và constructor của các thuộc tính của object. Phần thân constructor có thể để trống nhưng phải có.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?