30/09/2018, 16:08

Cách sử dụng hàm tạo sao chép trong c++ như thế nào là tốt nhất?

Mình có một đoạn code sau nhờ mọi người xem nên sử dụng hàm tạo sao chép như thế nào là tốt nhất trong những cách sau và còn có cách nào để tối ưu hóa code tốt hơn không?

class MonHoc
{
private:
    string monHoc;
    int soTiet;
public:
    MonHoc();
    MonHoc(string, int);
    void Nhap();
    void Xuat();
};

class GiaoVien
{
private:
    string hoTen;
    int namSinh;
    int soMH;
    MonHoc *mHoc;
public:
    GiaoVien();
    GiaoVien(const GiaoVien&);
    const GiaoVien& operator= (const GiaoVien&);
    ~GiaoVien();
    void Nhap();
    void Xuat();
};

//Class Giáo Viên
GiaoVien::GiaoVien()
{
    hoTen = "NULL";
    namSinh = 0;
    soMH = 0;
    mHoc = NULL;
}

// Hàm tạo sao chép
GiaoVien::GiaoVien(const GiaoVien& x)
{
    hoTen = x.hoTen;
    namSinh = x.namSinh;
    soMH = x.soMH;
    mHoc = new MonHoc[x.soMH+1];
    for (int i=0; i<x.soMH; i++)
        mHoc[i] = x.mHoc[i];
}

//Hàm tạo sao chép bằng cách dùng toán tử gán
const GiaoVien& GiaoVien::operator= (const GiaoVien& x)
{
    hoTen = x.hoTen;
    namSinh = x.namSinh;

    /* Có nên tạo thêm biến n nữa không???*/
    //int n = x.soMH;
    //soMH = n;

    soMH = x.soMH;
    //if (n)
    if (mHoc)
        delete mHoc;
    if (soMH)
    {
        mHoc = new MonHoc [soMH + 1];
        for (int i=0; i<x.soMH; i++)
            mHoc[i] = x.mHoc[i]; 
    }
    return x;
}

GiaoVien::~GiaoVien()
{
    delete mHoc;
}
AnNdth viết 18:23 ngày 30/09/2018

@ltd @tuancoi2506 2 anh có thể cho e ý kiến về bài này không ạ? Em cảm ơn nhiều.

Nguyễn Minh Dũng viết 18:24 ngày 30/09/2018

Đã bookmark, a đang bận tí, có thời gian vào chém

Bài liên quan
0