Mọi thứ trong C++ đều được liên kết với các lớp-Class và đối tượng-Object, cùng với các thuộc tính và phương thức của nó. Trong chương trình tào lao phiên bản 3 trong C++ của chúng ta, có thể coi SinhVien như một lớp (Class) mặc dù chúng ta không chủ động tạo ra lớp SinhVien. Trong đời thực, Xe là một lớp, trong lúc Toyota, Honda, BMW...là các đối tượng.
Các thuộc tính và phương thức về cơ bản là các biến và hàm thuộc về lớp. Những khái niệm này thường được gọi là "thành viên của lớp".Phương thức (Method) là các hàm (Function) của lớp (Class).
Có hai cách để định nghĩa các hàm thuộc về một lớp:
- Định nghĩa bên trong định nghĩa lớp.
- Định nghĩa bên ngoài định nghĩa lớp.
Lưu ý: Bạn truy cập các phương thức giống như bạn truy cập các thuộc tính; bằng cách tạo một đối tượng của lớp và sử dụng cú pháp dấu chấm (.)
Định nghĩa phương thức bên trong định nghĩa lớp
Chúng ta sẽ tiếp tục với chương trình của phần trước:
#include <iostream>
#include <string>
using namespace std;
class SinhVien { // Tên lớp
public: // Access specifier
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)
};
int main() {
SinhVien sinhVienA; // 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;
// In gia tri
cout << sinhVienA.diemTrungBinh << endl;
cout << sinhVienA.hoten << endl;
cout << sinhVienA.email << endl;
cout << sinhVienA.diaChi << endl;
cout << sinhVienA.chuyenNganh << endl;
SinhVien sinhVienB; // 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;
// In gia tri
cout << sinhVienB.diemTrungBinh << endl;
cout << sinhVienB.hoten << endl;
cout << sinhVienB.email << endl;
cout << sinhVienB.diaChi << endl;
cout << sinhVienB.chuyenNganh << endl;
return 0;
}
Việc in giá trị lặp đi lặp lại nên ta nghĩ tới việc định nghĩa một phương thức bên trong định nghĩa lớp. Phương thức của chúng ta chỉ in giá trị nên sẽ là void. Ta sẽ đặt tên là inGiaTri().
Lớp SinhVien bây giờ trông sẽ thế này
class SinhVien { // Tên lớp
public: // Access specifier
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;
}
};
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 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;
}
};
int main() {
SinhVien sinhVienA; // 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;
// In gia tri
cout << sinhVienA.diemTrungBinh << endl;
cout << sinhVienA.hoten << endl;
cout << sinhVienA.email << endl;
cout << sinhVienA.diaChi << endl;
cout << sinhVienA.chuyenNganh << endl;
SinhVien sinhVienB; // 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;
// In gia tri
cout << sinhVienB.diemTrungBinh << endl;
cout << sinhVienB.hoten << endl;
cout << sinhVienB.email << endl;
cout << sinhVienB.diaChi << endl;
cout << sinhVienB.chuyenNganh << endl;
return 0;
}
Sử dụng IDE Online để chạy chương trình
Bây giờ chúng ta sẽ Xóa các lệnh in giá trị của sinh viên A và sinh viên B, sau đó ta thêm hai dòng code sau
sinhVienA.inGiaTri();
sinhVienB.inGiaTri();
Chương trình hiện tại của chúng ta
#include <iostream>
#include <string>
using namespace std;
class SinhVien { // Tên lớp
public: // Access specifier
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;
}
};
int main() {
SinhVien sinhVienA; // 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; // 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.inGiaTri();
sinhVienB.inGiaTri();
return 0;
}
Bấm Run để chạy chương trình
Định nghĩa phương thức bên ngoài định nghĩa lớp
Để định nghĩa một hàm bên ngoài định nghĩa lớp, chúng ta phải khai báo nó bên trong lớp và sau đó định nghĩa nó bên ngoài lớp. Điều này được thực hiện bằng cách chỉ định tên của lớp, theo sau là toán tử (::), theo sau là tên của hàm.
Chúng ta sẽ giữ nguyên phương thức inGiaTri() để dễ so sánh, ta sẽ khai báo thêm một phương thức gọi là inGiaTri2(). Lưu ý chỉ khai báo, chúng ta sẽ định nghĩa phương thức inGiaTri2() bên ngoài định nghĩa lớp SinhVien()
Đâ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 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();
};
int main() {
SinhVien sinhVienA; // 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; // 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.inGiaTri();
sinhVienB.inGiaTri();
return 0;
}
Bấm Run để chạy thử
Chúng ta định nghĩa phương thức inGiaTri2() bên ngoài như sau
void SinhVien::inGiaTri2() {
cout << diemTrungBinh << endl;
cout << hoten << endl;
cout << email << endl;
cout << diaChi << endl;
cout << chuyenNganh << endl;
}
Để thử phương thức inGiaTri2() chúng ta thay đổi một chút như sau:
sinhVienA.inGiaTri2();
sinhVienB.inGiaTri2();
Chương trình của chúng ta hiện tại sẽ thế này
#include <iostream>
#include <string>
using namespace std;
class SinhVien { // Tên lớp
public: // Access specifier
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();
};
int main() {
SinhVien sinhVienA; // 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; // 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;
}
Bấm Run để chạy chương trình
Không có nhận xét nào:
Đăng nhận xét