Class trong C++: Cách Khai Báo Class Trong C++ Chi Tiết

C++ là một trong những ngôn ngữ lập trình được ứng dụng phổ biến nhất trên thế giới. Trong bài viết này, LANIT sẽ cùng bạn đọc tìm hiểu về Class trong C++, cách thức hoạt động, và tại sao nó quan trọng đối với ngôn ngữ lập trình C.

Class trong C++ là gì?

Class (lớp) trong C++ là nền tảng để lập trình hướng đối tượng (Object-Oriented programming). Đây là một kiểu dữ liệu do chính người dùng định nghĩa, bao gồm data members (dữ liệu thành viên) và data functions (hàm).

Class trong C++: Cách Khai Báo Class Trong Ngôn Ngữ Lập Trình C Chi Tiết
Class trong C++ là gì?

Một class là mô tả trừu tượng của một đối tượng, bao gồm các thuộc tính (dữ liệu) và phương thức (hành vi). Chúng ta có thể sử dụng lớp để tạo nên đối tượng, với thuộc tính và phương thức tương ứng.

Ví dụ:

cpp
class HinhChuNhat {
   public:
      double chieu_dai;   // thuộc tính
      double chieu_rong;
      double tinhDienTich() {  // phương thức
         return chieu_dai * chieu_rong;
      }
};

Trong ví dụ này, HinhChuNhat là một Class đại diện cho hình chữ nhật, có hai thuộc tính là chiều dài và chiều rộng, cùng với phương thức tinhDienTich() để tính diện tích.

Chúng ta có thể sử dụng Class HinhChuNhat để tạo ra các đối tượng hình chữ nhật, với giá trị chiều dài và chiều rộng cụ thể cho từng đối tượng.

Định hướng tìm hiểu về Class trong C++

Cách khai báo class trong ngôn ngữ lập trình C

Để khai báo class trong C++, ta sử dụng từ khóa class cùng với tên của lớp và các thành phần của lớp được định nghĩa bên trong dấu ngoặc nhọn. Các thành phần bao gồm các thuộc tính (data), phương thức (method), các constructor và destructor.

Cách khai báo Class trong C++
Cách khai báo Class trong C++

Cú pháp khai báo class trong C++:

cpp

class TenLop {

  // Access specifier cho các thành viên của lớp (public, private, protected)

  access_specifier:

    // Thuộc tính (data) của Class

    data_type property1; 

    data_type property2;

    ...

  // Phương thức (method) trong Class

  public:

    return_type method1(tham số); 

    return_type method2(tham số); 

    ...

  // Hàm khởi tạo và Hàm huỷ của Class

  public:

    TenLop(); 

    ~TenLop(); 

};

Trong đó,

  • TenLop là tên của lớp.
  • access_specifier xác định phạm vi truy cập của các thành viên của lớp: public, private hoặc protected.
  • data_type là kiểu dữ liệu của thuộc tính (dữ liệu).
  • property1, property2, … là tên của các thuộc tính (dữ liệu) của lớp.
  • return_type là kiểu dữ liệu được trả về bởi phương thức (hành vi).
  • method1(tham số), method2(tham số), … là các phương thức hành vicủa lớp, mỗi phương thức có kiểu dữ liệu trả về và danh sách tham số đầu vào.
  • TenLop() là constructor của lớp, được sử dụng để khởi tạo đối tượng khi nó được tạo ra.
  • ~TenLop() là destructor của lớp, được sử dụng để giải phóng bộ nhớ khi đối tượng bị xóa hoặc hủy.

Tìm hiểu về Access modifiers & properties declaration

Trong C++, access modifiers (trình truy cập) được sử dụng để xác định phạm vi truy cập cho các thành viên của một lớp. Có ba loại access modifiers: public, protected và private.

  • Public: Thành viên có access modifier public có thể được truy cập từ bất kỳ đâu trong chương trình. Các thuộc tính và phương thức có access modifier public có thể được truy cập từ bên ngoài lớp thông qua đối tượng của lớp.
  • Protected:Thành viên có access modifier protected chỉ có thể được truy cập từ bên trong lớp hoặc từ các lớp dẫn xuất (kế thừa) của lớp đó. Điều này giúp bảo vệ dữ liệu của lớp khỏi việc sửa đổi không mong muốn từ bên ngoài.
  • Private: Thành viên có access modifier private chỉ có thể được truy cập từ bên trong lớp, không thể truy cập từ bên ngoài lớp hoặc các lớp dẫn xuất khác. Access modifier private giúp giấu dữ liệu của lớp khỏi các đối tượng khác trong chương trình.

Access modifiers được sử dụng trong khai báo thuộc tính của lớp. 

Properties declaration: Khai báo thuộc tính trong lớp bao gồm kiểu dữ liệu và tên thuộc tính, cùng với access modifier (public, protected hoặc private) để xác định phạm vi truy cập của thuộc tính đó.

Ví dụ:

cpp

class SinhVien {

  private:

    string ten;

    int tuoi;

  public:

    void setTen(string ten_sv) {

        ten = ten_sv;

    }

    string getTen() {

        return ten;

    }

};

Trong ví dụ này, lớp SinhVien có hai thuộc tính là ten và tuoi. Access modifier private được sử dụng để bảo vệ các thuộc tính khỏi việc truy cập từ bên ngoài. Lớp SinhVien cũng có hai phương thức setTen() và getTen() để thiết lập và truy xuất giá trị của thuộc tính ten. Các phương thức này có access modifier public, cho phép các đối tượng khác trong chương trình truy cập và sửa đổi giá trị của thuộc tính ten.

Tổng quan về Method declaration 

Method declaration trong C++ là quá trình khai báo các phương thức (hành vi) của lớp, bao gồm kiểu dữ liệu trả về của phương thức, tên phương thức và danh sách tham số đầu vào nếu có. Method declaration giúp người lập trình xác định các hành động mà đối tượng của lớp có thể thực hiện.

Cú pháp khai báo method trong C++:

cpp

return_type TenLop::tenPhuongThuc(type1  parameter1, type2 parameter2, ...) {

  // code thực thi của method

}

Trong đó,

  • return_type là kiểu dữ liệu trả về của phương thức.
  • TenLop là tên của lớp chứa phương thức đó.
  • tenPhuongThuc là tên của phương thức.
  • type1 parameter1, type2 parameter2, … là danh sách các tham số đầu vào của phương thức.

Hiểu về Getter và setter

Getter và Setter luôn đồng hành với nhau
Getter và Setter luôn đồng hành với nhau

Getter và setter là hai phương thức được sử dụng để truy cập và thiết lập giá trị của thuộc tính (dữ liệu) của một đối tượng trong lập trình hướng đối tượng.

  • Getter được sử dụng để truy xuất giá trị của một thuộc tính. Nó trả về giá trị của thuộc tính cho người gọi phương thức. Getter có thể được đặt tên theo kiểu “getTenThuocTinh()” hoặc “tenThuocTinh()”.
  • Setter là một phương thức được sử dụng để thiết lập giá trị của một thuộc tính. Để giảm thiểu rủi ro và bảo vệ tính toàn vẹn của dữ liệu, setter thường được sử dụng để kiểm tra và xác thực việc gán giá trị cho thuộc tính. Setter có thể được đặt tên theo kiểu “setTenThuocTinh()” hoặc “tenThuocTinh()”.

Khái niệm biến tĩnh 

Biến tĩnh (static variables) là các biến được khai báo trong một lớp và không thuộc về bất kỳ Object cụ thể nào của lớp đó. Biến tĩnh tại Class nào thì thuộc về Class đó và có thể được truy cập trực tiếp từ chính tên của Class.

Các biến tĩnh cũng giống như các biến thông thường, có thể được khởi tạo và sử dụng trong toàn bộ phạm vi của Class tương ứng. Giá trị của biến tĩnh được lưu trữ duy nhất tại Class và được chia sẻ sử dụng giữa tất cả các Object trong lớp.

Hàm dựng trong C++

Hàm trong C++ là một khối mã chương trình độc lập có thể được gọi từ các phần khác của chương trình. Hàm bao gồm một tên hàm, một danh sách các tham số đầu vào, một kiểu trả về và một thân hàm.

Ví dụ:

int Tong(int a, int b)

{

    return a + b;

}

Trong ví dụ trên, chúng ta đã tạo một hàm có tên là Tong, nhận hai tham số đầu vào kiểu int và trả về tổng của hai số đó. Chúng ta có thể gọi hàm này từ bất kỳ đâu trong chương trình bằng cách sử dụng cú pháp sau:

int x = 5;

int y = 7;

int z = Tong(x, y); // z sẽ có giá trị là 12

Chúng ta cũng có thể tạo ra các hàm không cần trả về giá trị nào. Ví dụ:

void InRaManHinh(string ten)

{

    cout << "Xin chao, " << ten << endl;

}

Trong ví dụ trên, chúng ta đã tạo một hàm không trả về giá trị nào, nhưng sẽ in ra một thông điệp chào mừng trên màn hình khi được gọi. Chúng ta có thể khởi tạo hàm này bằng cách:

InRaManHinh(“LANIT”); // sẽ in ra “Xin chao, LANIT”

Các hàm trong C++ rất hữu ích để tạo ra các đoạn mã tái sử dụng và giảm thiểu lỗi trong chương trình.

Ví dụ mở rộng về Class trong C++

Ví dụ về Class trong C++
Ví dụ về Class trong C++

Ví dụ về một lớp NhanVien, bao gồm các thuộc tính như mã nhân viên, tên, tuổi và lương, và các phương thức để tìm kiếm thông tin nhân viên, tính lương và in ra thông tin nhân viên:

#include <iostream>

using namespace std;

class NhanVien {

    private:

        int maNV;

        string tenNV;

        int tuoiNV;

        double luongNV;

    public:

        void nhapTT() {

            cout << "Nhap ma nhan vien: ";

            cin >> maNV;

            cout << “Nhap Name nhan vien: “;

            cin.ignore();

            getline(cin,tenNV);

            cout << “Nhap tuoi nhan vien: “;

            cin >> tuoiNV;

            cout << "Nhap luong nhan vien: ";

            cin >> luongNV;

        }

        void xuatTT() {

            cout << “Ma nhan vien: ” << maNV << endl;

            cout << “Name nhan vien: ” << tenNV << endl;

            cout << “Tuoi nhan vien: ” << tuoiNV << endl;

            cout << “Luong nhan vien: ” << luongNV << endl;

        }

        double tinhLuong() {

            return luongNV*1.2; // tăng 20% lương

        }

};

int main() {

    NhanVien nv1;

    nv1.nhapTT();

    nv1.xuatTT();

    cout << "Luong nhan vien sau khi tang la: " << nv1.tinhLuong() << endl;

    return 0;

}

Trong ví dụ trên, chúng ta đã tạo ra một lớp NhanVien với các thuộc tính và phương thức để quản lý thông tin của một nhân viên. Trong hàm main, chúng ta đã tạo một đối tượng nv1 từ lớp NhanVien, nhập thông tin và tính toán lương. Cuối cùng, chúng ta in ra thông tin đầy đủ của nhân viên và lương sau khi được tăng 20%.

Có thể thấy, Class trong C++ là một công cụ rất mạnh mẽ để xây dựng các kiểu dữ liệu phức tạp và quản lý dữ liệu.

Kết luận

Như vậy, Class trong C++ là một công cụ mạnh mẽ giúp người dùng dễ dàng tạo lập và bảo trì ứng dụng/phần mềm. Tuy nhiên, khi sử dụng Class, chúng ta cần cân nhắc kỹ về tính bảo mật và tính tái sử dụng của mã nguồn. Việc thiết kế và triển khai một lớp phải đảm bảo tính bảo mật cao, không để dữ liệu bị lộ ra ngoài hoặc bị thay đổi một cách trái phép. Ngoài ra, các mã nguồn nên được thiết kế sao cho có thể tái sử dụng được trong các dự án khác nhau.

Cảm ơn bạn đọc đã theo dõi bài viết của chúng tôi!

avata Hải

Triệu Huyền Trang

Triệu Huyền Trang chuyên gia 3 năm kinh nghiệm trong ngành Công Nghệ, Phần Mềm. Chuyên chia sẻ các kiến thức phần mềm mã nguồn, ứng dụng và thông tin về công nghệ hữu ích.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!