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;
}
Bài liên quan
@ltd @tuancoi2506 2 anh có thể cho e ý kiến về bài này không ạ? Em cảm ơn nhiều.
Đã bookmark, a đang bận tí, có thời gian vào chém