Thứ Ba, 7 tháng 5, 2024

48. Phương thức - Method trong C++

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


Phần tiếp theo


Phần trước

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

Đăng nhận xét