10 Từ Khóa Không Thể Không Biết Trong C++ OOP

10 Từ Khóa Không Thể Không Biết Trong C++ OOP

Trong phần trước mình đã trình bày cho các bạn một số từ khóa hay gặp trong lập trình hàm bình thường, trong bài viết này mình xin được trình bày thêm về các từ khóa hay gặp trong lập trình hướng đối tượng nhé!

  1. Class
    • class là cú pháp để tạo nên một lớp.
    • class nameClass {
      private:
      //
      protected:
      //
      public:
      //
      };
  2. :
    • Trong C++ có các kiểu phạm vi là public, protected, private.
    • Sau mỗi từ khóa trên đều có toán tử : để biểu thị các thuộc tính và phương thức sau nó đều chung một phạm vi
    • Ví dụ:
    • private: 
      	int x;
      	int y;
      // các biến x,y thuộc phạm vi truy cập private
      public:
      	int count;
      // count thuộc phạm vi truy cập public
      protected:
      	string id;
      //id thuộc phạm vi truy cập protected
  3. ::
    • :: là toán tử cho phép class truy cập thuộc tính và phương thức bên ngoài class để định nghĩa.
    • Ví dụ:
      • class World{
        public:
        	void XinChao(){};	
        };
        
        void World::XinChao()
        {
        	cout<<"Hello World"<<endl;
        }
    • Do đặc thù trong C++ là viết hàm trước rồi định nghĩa sau nên toán tử :: đóng một vai trò rất quan trọng.
  4.  .
    • . là toán tử cho phép thực thể truy cập vào thuộc tính và phương thức.
    • Ví dụ bên trên class World ta muốn tạo ra ở main một thực thể có tên là w, và muốn truy cập tới phương thức XinChao() ta truy cập theo cú pháp: tenthucthe.Phuongthuc;
      • int main()
        {
        	World w;
        	w.XinChao();
        	return 0;
        }
    • Lưu ý khi truy cập tới phương thức để tránh lỗi ta cần phải biết phạm vi hoạt động của nó.
  5.  Private
    • private là từ khóa chỉ phạm vi truy cập của thuộc tính và phương thức của lớp.
    • Khi các biến và phương thức được khai báo với từ khóa private tức là biến này chỉ có phạm vi truy cập trong class đó. Mọi hành vi cố gắng truy xuất nó bên ngoài class đều bị báo lỗi.
    • Ví dụ:
    • #include <bits/stdc++.h>
      using namespace std;
      class DV{
      private:
      	string name = "";
      };
      int main()
      {
      	DV a;
      	a.name = "Con cho";
      	return 0;
      }
      
      • Ở đây thuộc tính (biến thành viên) mình khai báo ở phạm vi private nên khi ở main mình đang cố gắng gán giá trị cho nó và kết quả bị báo lỗi "[Error] 'std::string DV::name' is private" 
    • Các thuộc tính hay phương thức trong phạm vi private đều không được kế thừa. 
    • Khi class khai báo không ghi rõ phạm vi truy cập nào thì mạc định nó sẽ là private
  6. Public
    • public là từ khóa chỉ phạm vi truy cập của thuộc tính và phương thức của lớp.
    • Các thuộc tính và phương thức ở phạm vi public đều có thể truy cập lấy giá  trị cũng như gán giá trị ở ngoài class, giống ví dụ trên ta sửa private thành public thì chương trình sẽ không báo lỗi nữa và thuộc tính name của đối tượng a sẽ được gán bằng "Con cho"
    • Các biến và phương thức trong phạm vi public đều được kế thừa (ngoại trừ hàm tạo và hàm hủy)
  7. Protected
    • protected là từ khóa chỉ phạm vi truy cập của thuộc tính và phương thức của lớp.
    • Các thuộc tính và phương thức trong phạm vi protected thì chúng có phạm vi truy cập ở trong lớp cơ sở và lớp dẫn xuất. (Ngoài 2 class cơ sở và dẫn xuất thì mọi hành vi cố gắng truy cập đều bị báo lỗi)
    • Ví dụ:
      • using namespace std;
        class DV{
        protected:
        	string name = "DV";
        };
        class Concho : public DV{
        public:
        	void setName(string n)
        	{
        		name = n;
        	}
        	
        	string getName()
        	{
        		return name;
        	}
        };
        int main()
        {
        	Concho a;
        	a.setName("Con cho");
        	cout<<a.getName();
        	return 0;
        }
      • Kết quả in ra màn hình "Con cho"
      • Qua ví dụ trên có thể thấy các thuộc tính & phương thức trong phạm vi protected đều được kế thừa.
    • Với từ khóa protected chúng ta cần phải thận trọng sử dụng chúng vì chúng rất dễ làm thay đổi giá trị của thuộc tính.
    • Qua các từ khóa trên ta có một bảng thống kê về phạm vi truy cập của các từ khóa trong kế thừa:
  8. This
    • Trong hướng đối tượng của C++ this đóng vai trò như là một con trỏ, this sẽ trỏ tới các thuộc tính của lớp.
    • Ví dụ:
      • class DV{
        private:
        	string name;
        public
        	void setName(string name)
        	{
        		this->name = name;
        	}
        };
      • Ví dụ trên ta có class DV có thuộc tính name và có một phương thức là setName(string name) ta thấy đố số truyền vào có tên giống như thuộc tính, để phân biệt giữa thuộc tính của lớp và đối số truyền vào của hàm ta thường sử dụng this->ThuocTinh để nhận biết đúng đâu là thuộc tính, đâu là đối số. Điều đó giúp ta không bị nhầm lẫn giữa các biến khi thay đổi giá trị. 
      • Các bạn thử thêm câu lệnh name = "Code"; sau câu lệnh this->name = name; trong hàm setName rồi chạy thử xem ra kết quả như nào nhé.
  9. Virtual
    • Khi một hàm có từ khóa virtual thì hàm đó là hàm ảo, và đồng thời nó cũng tượng trưng cho tính đa hình trong hướng đối tượng.
    • Có 2 loại hàm ảo là:
    • virtual void DiChuyen()  // hàm ảo
      {
      	cout<<"No Traffic"<<endl;
      };
      virtual void Luong() {} = 0; // hàm thuần ảo
    • Sự khác biệt giữa hàm ảo và hàm thuần ảo là:
      • Khi kế thừa hàm ảo không cần thiết phải định nghĩa lại, còn hàm thuần ảo bắt buộc phải định nghĩa và nó được sử dụng khi muốn tạo một lớp trừu tượng.
  10.  Static
    • static là từ khóa khai báo các thuộc tính và phương thức tĩnh.
    • Các thuộc tính static chỉ khởi tạo 1 lần và dùng chung cho tất cả các đối tượng.
    • Ví dụ:
      • #include <bits/stdc++.h>
        using namespace std;
        
        class Count{		
        public:	
        	Count()
        	{
        		static int count = 0;
        		count++;
        		cout<<count<<" ";
        	}
        
        };
        int main()
        {
        	Count a,b,c,d;
        	return 0;
        }
        
      • Kết quả in ra là: 1 2 3 4 do ta khai báo 4 thực thể, mỗi khi khai báo một thực thể nó sẽ gọi hàm tạo và mỗi lần gọi nó được tăng lên một đơn vị nên kết quả ra 1 2 3 4 chứ không phải 1 1 1 1. Vì vậy ta có thể thấy biến count chỉ khởi tạo giá trị = 0 duy nhất 1 lần.
    • Các phương thức static chỉ gồm các biến static.
    • Để tìm hiểu rõ hơn về static các bạn vào khóa Lập trình hướng đối tượng trong C++ của codelearn để tìm hiểu rõ tính năng của nó hơn nhé.

Tổng Kết

Trên đây là một số từ khóa chúng ta hay gặp nhiều nhất trong lập trình hướng đối tượng và mình cũng đã giới thiệu qua một số đặc điểm và tính năng của chúng. Để tìm hiểu chi tiết hơn thì các bạn nên học khóa Lập trình hướng đối tượng trong C++. Cảm ơn các bạn đã đọc, có sai sót gì mong các bạn comment để mình có thể chỉnh sửa và tiếp thu kiến thức mới.