Thắc mắc về gán một số INT cho đối tượng

Mình có 1 đoạn code cho class PhanSo như này:

class PhanSo
{
public:
    int ts, ms;
    PhanSo(int ts = 0, int ms = 1)
    {
        this->ts = ts;
        this->ms = ms;
    };
};

Tại sao đoạn code này lại không có lỗi:

PhanSo a;
a = 3;

Mình cảm ơn!

tại constructor (ctor) của PhanSo ko có keyword explicit nên trình dịch nó có thể cast ngầm (implicit cast) int thành PhanSo:V

PhanSo(int ts = 0, int ms = 1)
// có thể tạo ra 3 loại ctor:
PhanSo(int ts, int ms)
PhanSo(int ts) // có thể cast ngầm định int thành PhanSo bằng ctor này
PhanSo()

muốn báo lỗi thì thêm explicit vào:

explicit PhanSo(int ts = 0, int ms = 1)

mà ko cần explicit thấy đẹp hơn mà :unamused:


khi viết ctor nếu chỉ có 1 tham số thì nên thêm keyword explicit cho ctor đó cho tránh cast ngầm thế này nha :V

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