Lớp và đối tượng trong C++

Trong bài này, bạn sẽ được học cách làm việc với đối tượng và lớp trong lập trình C++.

C++ là một ngôn ngữ lập trình đa mô hình (multi-paradigm). Nghĩa là nó có thể hỗ trợ nhiều phong cách lập trình khác nhau.

Một trong những phương pháp rất phổ biến để giải quyết một vấn đề lập trình đó là tạo các đối tượng (object), hay còn được biết tới là lập trình hướng đối tượng (object-oriented).

C++ hỗ trợ lập trình hướng đối tượng mà trong đó bạn có thể chia nhỏ các vấn đề phức tạp thành các bài toán nhỏ hơn dựa vào việc tạo ra các đối tượng.

Đối tượng chỉ đơn giản là một tập hợp của dữ liệu cùng với các hàm tương tác với tập dữ liệu đó.

Lớp trong C++

Trước khi bạn tạo một đối tượng trong C++, bạn cần định nghĩa một lớp (class).

Một lớp là một bản thiết kế cho đối tượng.

Chúng ta có thể xem lớp là một bản vẽ prototype của một ngôi nhà. Nó chứa toàn bộ thông tin về sàn, cửa chính, cửa sổ…Dựa trên những mô tả đó, chúng ta có thể xây dựng nên ngôi nhà. Ngôi nhà chính là một đối tượng.

Và rất nhiều ngôi nhà khác có thể được dựng lên theo cùng mô tả của bản vẽ như vậy, cũng như chúng ta có thể tạo rất nhiều đối tượng từ một lớp.

Cách định nghĩa lớp trong C++?

Một lớp được định nghĩa trong C++ sử dụng từ khóa class đi kèm với tên lớp.

Thân của lớp được định nghĩa bên trong hai dấu ngoặc nhọn và được kết thúc bởi dấu chấm phẩy ở cuối.

class tên_lớp
   {
   // dữ liệu
   // hàm
   };

Ví dụ: lớp trong C++

class Test
{
    private:
        int data1;
        float data2;  

    public:  
        void function1()
        {   data1 = 2;  } 

        float function2()
        { 
            data2 = 3.5;
            return data2;
        }
};

Ở đây chúng ta định nghĩa một lớp tên là Test.

Lớp này có hai dữ liệu thành viên: data1data2 và hai hàm thành viên là function1()function2().

Từ khóa: private và public

Bạn có thể thấy có hai từ khóa: private và public trong ví dụ trên.

Từ khóa private khiến dữ liệu và hàm trở thành dữ liệu và hàm riêng tư. Dữ liệu và hàm riêng tư chỉ có thể được truy xuất từ bên trong lớp.

Từ khóa public khiến dữ liệu và hàm trở thành dữ liệu và hàm mở. Dữ liệu và hàm mở có thể được truy xuất từ bên ngoài lớp.

Ở đây, data1data2 là các thành viên riêng tư trong khi function1()function2() là các thành viên mở.

Nếu bạn cố thử truy xuất dữ liệu riêng tư từ bên ngoài lớp, trình biên dịch sẽ báo lỗi. Đặc tính này của OOP được gọi là che giấu dữ liệu (data hiding).

Đối tượng trong C++

Khi lớp được định nghĩa, chỉ có đặc tả của đối tượng được định nghĩa, không có vùng nhớ hay ô chứa nào được cấp phát.

Để sử dụng dữ liệu và truy cập vào các hàm định nghĩa trong lớp, bạn cần tạo đối tượng.

Cú pháp định nghĩa đối tượng trong C++

tên_lớp tên_biến_đối_tượng;

Bạn có thể tạo đối tượng của lớp Test (định nghĩa ở ví dụ trên) như sau:

class Test
{
    private:
        int data1;
        float data2;  

    public:  
        void function1()
        {   data1 = 2;  } 

        float function2()
        { 
            data2 = 3.5;
            return data2;
        }
   };

int main()
{
    Test o1, o2;
}

Ở đây hai đối tượng o1o2 của lớp Test được tạo.

Trong lớp Test trên, data1data2 là các dữ liệu thành viên còn function1()function2() là các hàm thành viên.

Cách truy xuất dữ liệu và hàm thành viên trong C++?

Bạn có thể truy xuất dữ liệu và hàm thành viên bằng cách sử dụng toán tử chấm (.). Ví dụ:

o2.function1();

Câu lệnh này sẽ gọi hàm function1() trong lớp Test của đối tượng o2.

Tương tự, dữ liệu thành viên có thể được truy xuất:

o1.data2 = 5.5;

Cầu lưu ý rằng, các thành viên (dữ liệu và hàm) riêng tư chỉ có thể được truy xuất trong nội bộ lớp

Vì vậy bạn có thể sử dụng o2.function1(); từ bất kỳ hàm hoặc lớp nào trong ví dụ trên. Tuy nhiên, câu lệnh o1.data = 5.5; luôn luôn nên được gọi bên trong lớp Test.

Ví dụ: Đối tượng và lớp trong lập trình C++

// Ví dụ thể hiện cách hoạt động của đối tượng và lớp trong lập trình C++
#include <iostream>
using namespace std;

class Test
{
    private:
        int data1;
        float data2;

    public:
       
       void insertIntegerData(int d)
       {
          data1 = d;
          cout << "Number: " << data1;
        }

       float insertFloatData()
       {
           cout << "\nEnter data: ";
           cin >> data2;
           return data2;
        }
};

 int main()
 {
      Test o1, o2;
      float secondDataOfObject2;

      o1.insertIntegerData(12);
      secondDataOfObject2 = o2.insertFloatData();

      cout << "You entered " << secondDataOfObject2;
      return 0;
 }

Đầu ra

Number: 12

Enter data: 23.3

You entered 23.3

Trong chương trình này, hai dữ liệu thành viên data1data2 cùng với hai hàm thành viên là insertIntegerData()insertFloatData() được định nghĩa trong lớp Test.

Hai đối tượng o1o2 của cùng lớp được được nghĩa.

Hàm insertIntegerData() được gọi từ đối tượng o1 bằng cách:

o1.insertIntegerData(12);

Câu lệnh này đặt giá trị data1 của đối tượng o1 là 12.

Sau đó hàm insertFloatData() của đối tượng o2 được gọi và giá trị trả về từ hàm đó được lưu trong biến seconDataOfObject2 bằng cách:

secondDataOfObject2 = o2.insertFloatData();

Trong chương trình này, data2 của o1data1 của o2 không được sử dụng và chứa giá trị rác.

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải