Lập trình

Lập trình

Thứ Bảy, 7 tháng 6, 2014

[B3] Class ,các quy tắc ,chú ý tiếp

Khi ta khai báo thuộc tính của class ta làm như sau : kieu_du_lieu tenThuocTinh;
Trong thực tế ta có thể khai báo tên biến toàn cục trùng với tên thuộc tính của một class nào đó khi đó trong các phương thức muốn sủ dụng tenThuocTinh thì ta sử dụng như sau tenClass :: tenThuocTinh; dấu '::' chỉ định tenThuocTinh là của tenClass chứ không phải biến toàn cục

Tương tự như thế khi ta triển khai định nghĩa hàm ta cũng có thể làm theo cách sau :
   class SinhVien{
               .....................
              public:
               layThongTin();
                };
SinhVien :: layThongTin() { .............. };

Trong thực tế khi lập trình ngoại trừ những hàm ngắn vài ba dong code ra thì các hàm còn lại nên được cài đặt bên ngoài lớp để rõ ràng sáng sủa và dễ theo dõi

Lưu ý: Khi dùng phương thức bên trong phương thức khác của lớp , mà phương thức lại bị trùng với các hàm tự do của chương trình thì ta dùng '::' để phân biệt đây là phương thức của lớp chứ không phải hàm tự do của chương trình . 

Còn một khái niệm nữa tôi muốn đề cập đó là hàm bạn (friend) trước khi nói đến vấn đề này ta cần xem lại khái niệm private , public , protected. Private qui định những gì nằm trong nó có phạm vi hoạt động chỉ trong lớp đó , nhưng hàm bạn có thể sử dụng nó
Có hai hàm là hàm bạn cơ bản trong C++ :
- Hàm tự do là hàm bạn của một lớp .
- Phương thức (Hàm) của lớp .

Một hàm bạn của một lớp được khai báo bằng từ khóa friend khi khai báo nguyên mẫu hàm trong lớp tương ứng :

Ta có một ví dụ :
      
#include<iostream>
//#include<stdio.h>

using namespace std;
class SinhVien{
private :
string hoten;
int tuoi;
public :
void set(string name){
hoten = name;
}
string get(){
return hoten;
}
friend void hamban(SinhVien sv); // khai báo hàm bạn
};

void hamban(SinhVien sv){ //cài đặt hàm bạn
cout << "Ban " << sv.hoten << " hoc rat gioi."; // sử dụng được sv.hoten                                                                                                        // (private) 
}

int main(){
SinhVien sinhVien1;
//fflush(stdin);
sinhVien1.set("Nguyen Van A");
cout << "Ten cua ban la : " << sinhVien1.get() << endl;
hamban(sinhVien1);
return 0;
}
Ta thấy định nghĩa hàm bạn như định nghĩa một hàm tự do thông thường
Và đây là kết quả :
   
Lưu ý : + Hàm bạn tuy được định nghĩa trong class bản chất không là phương thức của class . và cách sử dụng và khai báo cũng như hàm tự do thông thường.
               + Ta có thể định nghĩa hàm bạn trong class ở chỗ nào cũng được vì hàm bạn không                    chịu  ảnh hưởng của private , public , protected. 
                         +Hàm bạn có thể truy nhập vào thuộc tính của class mà nó làm bạn , việc này bặt buộc phải                            thông qua một đối tượng cụ thể . Đối tượng cụ thể ở ví dụ trên là sv và sinhVien1 .
 
Ngoài ra một phương thức func của class X cũng có thể là hàm bạn của class Y
 Sau đây là cách cài đặt (mình copy từ tài liệu của trường đại học Bưu Chính Viễn Thông)


 
Còn muốn các phương thức của class A sử dụng được private B thì cần khai bóa class A
là hàm bạn của B
Đến đây tôi xin nhắc lại các thuộc tính của class nên để dưới private vì thế khi truy suất các thuộc tính này ta dùng hàm get/set mà tôi đã giới thiệu ở B2.

Không có nhận xét nào:

Đăng nhận xét