Trang chủLập trìnhLập trình C/C++Làm sao để tạo Class? Thuộc tính và phương thức trong OOP...

Làm sao để tạo Class? Thuộc tính và phương thức trong OOP là gì? C++

Làm sao để tạo Class?

Trong C++, để định nghĩa một lớp ta bắt đầu bằng từ khóa class, tiếp theo đó là tên của lớp và phần thân lớp được bao bởi cặp dấu {}. Kết thúc lớp bằng dấu ;

Ví dụ:

class Person //Lớp Person 
{
    private: // Phạm vi truy cập
      string name; // Thuộc tính (kiểu string)
    public:
		void setName();// Phương thức (method)
    	string getName();   // Phương thức (method)
};

Một lớp có thể được kế thừa từ hơn một lớp khác, nghĩa là, nó có thể kế thừa dữ liệu và hàm từ nhiều lớp cơ sở. Để định nghĩa một lớp kế thừa , chúng ta sử dụng một danh sách để xác định các lớp cơ sở. Danh sách này liệt kê một hoặc nhiều lớp cơ sở và có form sau:

class lop_ke_thua: access_modifier lop_co_so

Bạn xem xét ví dụ sau với Person là lớp cơ sở và Male là lớp kế thừa:

class Person
{
    protected :
      string name = "Tanchan679.com"; //Khai bao bien name
};

class Male: public Person{
	private:
	public:
		string getName()
		{
			 return this->name;//trả về biến name của lớp Person
		}
};

Thuộc tính và phương thức trong OPP là gì?

  • Thuộc tính (Attribute): là những thông tin, đặc điểm của đối tượng.
  • Phương thức (Method): là những hành động mà đối tượng có thể thực hiện.

Một ví dụ đơn giản là cái máy tính.

  • Máy tính sẽ có các thuộc tính như: màu sắc, kích thước, bộ nhớ, …
  • Và các phương thức như: quét virus, tắt máy, khởi động máy, chụp ảnh …

Khi một đối tượng có những đặc tính như nhau sẽ được gom lại thành một lớp đối tượng (class) và cũng sẽ có 2 thành phần là thuộc tính và phương thức.

Constructor là gì?

Constructor trong C++ là một phương thức đặc biệt được gọi tự động tại thời điểm tạo đối tượng. Nó được sử dụng để khởi tạo các thành viên dữ liệu của các đối tượng mới. Constructor trong C++ có cùng tên với lớp hoặc struct.

Constructor trong C++ có thể được chia thành 2 loại:

  • Constructor mặc định.
  • Constructor có tham số.

Constructor mặc định

Một constructor không có đối số được gọi là constructor mặc định. Nó được gọi tại thời điểm tạo đối tượng.

Ví dụ về Constructor mặc định

#include <iostream>
#include <string.h>
using namespace std;
class Person{
public:
    Person() {
        cout << "Khi ban khoi tao class phuong thuc nay se tu dong duoc goi..." << endl;
    }
};
int main()
{
	Person parson;
}

Kết quả

Kết quả thực hiện chương trình

Constructor có tham số

Một constructor có tham số được gọi là constructor tham số hóa. Nó được sử dụng để cung cấp các giá trị khác nhau cho các đối tượng riêng biệt.

Ví dụ về Constructor tham số 

#include <iostream>
#include <string.h>
using namespace std;


class Person {
public:
    string name; 
    Person(string name)
    {
        this->name = name;
    }
    void display() { cout << name << endl; }
};

int main()
{
	Person parson = Person("Day la Constructor co tham so");
	parson.display();
}

Kết quả

Lập trình C - Làm sao để tạo Class? Thuộc tính và phương thức trong OPP là gì?

Các phạm vi truy cập của thuộc tính, phương thước

Trong phương pháp lập trình hướng đối tượng các thuộc tính và phương thức được ràng buộc về mức độ truy cập, giúp cho dữ liệu được bảo mật hơn.Cụ thể thể là ba phạm vi: privateprotectedpublic như bảng sau:

Phạm vi truy cậpÝ Nghĩa
publicKhông hạn chế. Thành phần có thuộc tính này có thể được truy cập ở bất kì vị trí nào
privateThành phần có thuộc tính này sẽ chỉ được truy cập từ bên trong lớp. Bên ngoài lớp hay trong lớp kế thừa sẽ không thể truy cập được.
protectedThành phần có thuộc tính này sẽ có thể truy cập ở trong nội bộ lớp và trong lớp kế thừa.

Phạm vi Private

Như bạn đã thấy ở bảng trên, private là giới hạn hẹp nhất của thuộc tính và phương thức trong hướng đối tượng. Khi các thuộc tính và phương thức khai báo với giới hạn này thì các thuộc tính phương thức đó chỉ có thể sử dụng được trong class đó, bên ngoài class không thể nào có thể sử dụng được nó kể cả lớp kế thừa nó cũng không sử dụng được.

VD: Mình sẽ khai báo và khởi tạo lớp person có các phương thức, và thuộc tính ở private.

#include <iostream>
#include <string.h>
using namespace std;
class Person
{
    private:
      string name = "Tanchan679.com";//khai báo biến name
};

int main()
{
	Person person;//khởi tạo lớp Person
	cout<<person.name;//Gọi biến name lớp Person từ bên ngoài
}

-Sau đó các bạn chạy chương trình lên sẽ nhận được một dòng thông báo lỗi có nội dung: [Error] ‘std::string Person::name’ is private

chương trinhg báo lỗi

-Như vậy các bạn có thể thấy khi sử dụng private thì chúng ta không có thể gọi và truy cập vào nó từ bên ngoài class được đúng không? Và nếu như bạn muốn truy cập vào nó ở bển ngoài class thì bạn phải sử dụng public.

VD:

#include <iostream>
#include <string.h>
using namespace std;
class Person
{
    public:
      string name = "Tanchan679.com"; //khai bao biến name
};

int main()
{
	Person person; //khởi tạo lớp Person
	cout<<person.name; //Gọi biến name lớp Person từ bên ngoài
}

Và đây là kết quả chạy

Kết qur thực hiện chường trình

Phạm vi Protected.

-Khác với private một chút thì các phương thức và  thuộc tính khi khai vào với visibility là protected thì chúng ngoài được sử dụng trong class đó ra thì class con kế thừa từ nó cũng có thể sử dụng được, như bên ngoài class không có thể sử dụng được.

VD:

#include <iostream>
#include <string.h>
using namespace std;
class Person
{
    protected :
      string name = "Tanchan679.com"; //Khai bao bien name
};

class Male: public Person{
	private:
	public:
		string getName()
		{
			 return this->name;//trả về biến name của lớp Person
		}
};
int main()
{
	Male male; //khởi tạo lớp male
	cout<<male.getName(); //Goi phuong thuc getName() của lớp Male 
}

Phạm vi Public.

-Đây là visibility có mức độ truy cập rộng nhất trong hướng đối tượng, khi một thuộc tính hay phương thức sử dụng visibility này thì chúng ta có thể tác động vào thuộc tính hay phương thức đó từ cả trong lẫn ngoài class.

VD:

#include <iostream>
#include <string.h>
using namespace std;
class Person
{
    public:
      string name; //Khai báo thuộc tính name
    public:
        //Khai báo phương thức để thay đổi giá trị thuộc tính name
		void setName(string name){
    		this->name = name;
    	}
          //Khai báo phương thức để lấy giá trị thuộc tính name
    	string getName()
    	{
    		return this->name;
		}
    
};

int main()
{
	Person person; //khởi tạo lớp
     //tác động vào thuộc tính name từ bên ngoài
	person.name = "Nguyen Van A";
	cout<<person.getName();  //Lấy và In ra giá trị hiện tại của biến name
	
   //tác động vào thuộc tính name thông qua phương thức setName()
	person.setName("Tran Thi B");
	cout<<"\n"<<person.getName(); //Lấy và In ra giá trị hiện tại của biến name
}

Output

Lập trình C - Làm sao để tạo Class? Thuộc tính và phương thức trong OPP là gì?

Như vậy khi chúng ta tác động vào biến name từ bên ngoài hay tác động thông qua phương thức thì giá trị của biến name đều bị thay đổi.

0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x