Phần trước, chúng ta co nói qua về Hàm khởi tạo sao chép ( Copy Constructor ), tuy nhiên để tránh việc quá tải, chúng ta chuyển việc phân tích qua phần này.
Nhắc lại: Hàm khởi tạo sao chép là một hàm tạo mà tạo một đối tượng bằng việc khởi tạo nó với một đối tượng của cùng lớp đó, mà đã được tạo trước đó.Chúng ta sẽ sửa lại vài chỗ chương trình của phần trước
- Xóa lệnh cout << chuyenNganh << endl; trong phương thức inGiaTri()
- Thêm tham số string b vào hàm khởi tạo SinhVien()
- Thêm lệnh chuyenNganh = b;
- Xóa lệnh sinhVienA.chuyenNganh = "CNTT";
- Xóa lệnh sinhVienB.chuyenNganh = "CNTT";
- Thay đổi 2 lệnh tạo đối tượng: SinhVien sinhVienA ("Dai Hoc Bach Khoa", "CNTT"); và SinhVien sinhVienB ("Dai Hoc Y Duoc", "Y Khoa");
Đây là chương trình sau khi đã sửa
#include <iostream>
#include <string>
using namespace std;
class SinhVien { // Tên lớp
public: // Access specifier
string tenTruong; // Thuộc tinh- Attribute (biến string)
string hoten; // Thuộc tinh- Attribute (biến string)
string email; // Thuộc tinh- Attribute (biến string)
string diaChi; // Thuộc tinh- Attribute (biến string)
string chuyenNganh; // Thuộc tinh- Attribute (biến string)
double diemTrungBinh; // Thuộc tinh- Attribute (biến double)
void inGiaTri() { // Phuong thuc inGiaTri dinh nghia ben trong Lop
cout << diemTrungBinh << endl;
cout << hoten << endl;
cout << email << endl;
cout << diaChi << endl;
//cout << chuyenNganh << endl;
}
void inGiaTri2();
SinhVien(string a, string b){
tenTruong = a;
chuyenNganh = b;
}
};
int main() {
SinhVien sinhVienA ("Dai Hoc Bach Khoa", "CNTT"); // Tạo một object từ Class SinhVien
// Access attributes and set values
sinhVienA.hoten = "Nguyen Van A";
sinhVienA.email = "nguyenvana@email.com";
sinhVienA.diaChi = "56 HV Da Nang";
//sinhVienA.chuyenNganh = "CNTT";
sinhVienA.diemTrungBinh = 9.2;
SinhVien sinhVienB ("Dai Hoc Y Duoc", "Y Khoa"); // Tạo một object khác từ Class SinhVien
// Access attributes and set values
sinhVienB.hoten = "Tran Van B";
sinhVienB.email = "tranvanb@email.com";
sinhVienB.diaChi = "87 HV Da Nang";
//sinhVienB.chuyenNganh = "CNTT";
sinhVienB.diemTrungBinh = 8.5;
sinhVienA.inGiaTri2();
sinhVienB.inGiaTri2();
return 0;
}
void SinhVien::inGiaTri2() {
cout << diemTrungBinh << endl;
cout << hoten << endl;
cout << email << endl;
cout << diaChi << endl;
cout << chuyenNganh << endl;
cout << tenTruong << endl;
}
Sử dụng IDE Online, chạy chương trình
Bây giờ chúng ta sẽ tạo một bản copy của hàm khởi tạo SinhVien(). Luôn nhớ rằng đây là hàm (Function) hay phương thức (Method) với tên giống với tên lớp.
SinhVien(SinhVien& t) { // copy constructor
hoten = t.hoten;
email = t.email;
diaChi = t.diaChi;
tenTruong = "Dai Hoc Tong Hop";
chuyenNganh = "Tieng Anh";
diemTrungBinh = 8.7;
}
Sau đó trong main() chúng ta tạo một đối tượng mới
SinhVien copySinhVienA (sinhVienA);
Cuối cùng, ta cho đối tượng mới copySinhVienA thực thi phương thức inGiaTri2() để in thông tin ra màn hình. Đây là chương trình của chúng ta:
#include <iostream>
#include <string>
using namespace std;
class SinhVien { // Tên lớp
public: // Access specifier
string tenTruong; // Thuộc tinh- Attribute (biến string)
string hoten; // Thuộc tinh- Attribute (biến string)
string email; // Thuộc tinh- Attribute (biến string)
string diaChi; // Thuộc tinh- Attribute (biến string)
string chuyenNganh; // Thuộc tinh- Attribute (biến string)
double diemTrungBinh; // Thuộc tinh- Attribute (biến double)
void inGiaTri() { // Phuong thuc inGiaTri dinh nghia ben trong Lop
cout << diemTrungBinh << endl;
cout << hoten << endl;
cout << email << endl;
cout << diaChi << endl;
//cout << chuyenNganh << endl;
}
void inGiaTri2();
SinhVien(string a, string b){
tenTruong = a;
chuyenNganh = b;
}
SinhVien(SinhVien& t) { // copy constructor
hoten = t.hoten;
email = t.email;
diaChi = t.diaChi;
tenTruong = "Dai Hoc Tong Hop";
chuyenNganh = "Tieng Anh";
diemTrungBinh = 8.7;
}
};
int main() {
SinhVien sinhVienA ("Dai Hoc Bach Khoa", "CNTT"); // Tạo một object từ Class SinhVien
// Access attributes and set values
sinhVienA.hoten = "Nguyen Van A";
sinhVienA.email = "nguyenvana@email.com";
sinhVienA.diaChi = "56 HV Da Nang";
//sinhVienA.chuyenNganh = "CNTT";
sinhVienA.diemTrungBinh = 9.2;
SinhVien sinhVienB ("Dai Hoc Y Duoc", "Y Khoa"); // Tạo một object khác từ Class SinhVien
// Access attributes and set values
sinhVienB.hoten = "Tran Van B";
sinhVienB.email = "tranvanb@email.com";
sinhVienB.diaChi = "87 HV Da Nang";
//sinhVienB.chuyenNganh = "CNTT";
sinhVienB.diemTrungBinh = 8.5;
SinhVien copySinhVienA (sinhVienA); // Loi goi copy constructor
sinhVienA.inGiaTri2();
sinhVienB.inGiaTri2();
copySinhVienA.inGiaTri2();
return 0;
}
void SinhVien::inGiaTri2() {
cout << diemTrungBinh << endl;
cout << hoten << endl;
cout << email << endl;
cout << diaChi << endl;
cout << chuyenNganh << endl;
cout << tenTruong << endl;
}
Bấm Run để chạy chương trình
Phần tiếp theo
Không có nhận xét nào:
Đăng nhận xét