Khai báo và sử dụng con trỏ đối tượng trong C++

Đây là bài 8/19 bài của series môn học Lập trình hướng đối tượng

1. Khai báo con trỏ đối tượng

Con trỏ đối tượng (pointer to object) dùng để chứa địa chỉ của biến đối tượng, được khai báo theo cú pháp như sau:

Tên_lớp* tên_biến_con_trỏ = new <hàm_khởi_tạo_của_lớp>;

Để truy xuất các thành phần của lớp từ con trỏ đối tượng trong C++, ta dùng toán tử “->” như sau:

Tên_con_trỏ -> Tên_thuộc_tính;
Tên_con_trỏ -> Tên_hàm(giá_trị_các_khai_báo_tham_số);
Ví dụ:
#include <iostream>
using namespace std;

class Circle{
private:
	float r;
public:
	//Hàm khởi tạo mặc định
	Circle(){
		this->r = 1.0;
	}
	//Hàm khởi tạo có tham số
	Circle(float r){
		this->r = r;
	}
	void setRadius(float r){
		this->r = r;
	}
	float getRadius(){
		return r;
	}
	float calculateArea(){
		return 3.14 * r * r;
	}
};
void main()
{
	Circle* c1 = new Circle();//sử dụng hàm khởi tạo mặc định
	Circle* c2 = new Circle(3.5);//sử dụng hàm khởi tạo có tham số
	c1->setRadius(99);
	cout<<"Area of Circle c1 = "<<c1->calculateArea();
	cout<<"\nArea of Circle c2 = "<<c2->calculateArea();
	system("pause");
}
Kết quả
Area of Circle c1 = 30775.1
Area of Circle c2 = 38.465

2. Con trỏ đối tượng và mảng đối tượng

Mảng đối tượng

Chúng ta xem lớp như là một kiểu dữ liệu mới. Chúng ta cũng có thể tạo ra một mảng gồm các phần tử có kiểu là lớp đó.

#include <iostream>
using namespace std;

class Circle{
private:
	float r;
public:
	//Hàm khởi tạo mặc định
	Circle(){
		this->r = 1.0;
	}
	//Hàm khởi tạo có tham số
	Circle(float r){
		this->r = r;
	}
	void setRadius(float r){
		this->r = r;
	}
	float getRadius(){
		return r;
	}
	float calculateArea(){
		return 3.14 * r * r;
	}
};
void main()
{
	Circle arr[5];//Khai báo mảng các đối tượng
	float r=0;
	for(int i=0;i<5;i++){
		cout<<"Input radius of Circle "<<i<<": ";
		cin>>r;
		arr[i].setRadius(r);
		cout<<"Area of Circle "<<i<<" = "<<arr[i].calculateArea()<<endl;
	}
	system("pause");
}
Kết quả
Input radius of Circle 0: 2.5
Area of Circle 0 = 19.625
Input radius of Circle 1: 9.8
Area of Circle 1 = 301.566
Input radius of Circle 2: 99
Area of Circle 2 = 30775.1
Input radius of Circle 3: 10.2
Area of Circle 3 = 326.686
Input radius of Circle 4: 5.8
Area of Circle 4 = 105.63

Dùng con trỏ đối tượng để lưu mảng đối tượng

Nếu con trỏ đối tượng trong C++ chứa địa chỉ phần tử đầu tiên của mảng đối tượng, có thể dùng con trỏ đối tượng để lưu mảng đối tượng.

#include <iostream>
using namespace std;

class Circle{
private:
	float r;
public:
	//Hàm khởi tạo mặc định
	Circle(){
		this->r = 1.0;
	}
	//Hàm khởi tạo có tham số
	Circle(float r){
		this->r = r;
	}
	void setRadius(float r){
		this->r = r;
	}
	float getRadius(){
		return r;
	}
	float calculateArea(){
		return 3.14 * r * r;
	}
};
void main()
{
	Circle arr[5];//Khai báo mảng các đối tượng
	float r=0;
	Circle* pc = new Circle; //Khai báo và sử dụng đối tượng kiểu con trỏ
	pc = arr; //Con trỏ pc tham chiếu đến mảng arr
	for(int i=0;i<5;i++){
		cout<<"Input radius of Circle "<<i<<": ";
		cin>>r;
		(pc+i)->setRadius(r);
		cout<<"Area of Circle "<<i<<" = "<<(pc+i)->calculateArea()<<endl;
	}
	system("pause");
}
Kết quả
Input radius of Circle 0: 9.9
Area of Circle 0 = 307.751
Input radius of Circle 1: 5.0
Area of Circle 1 = 78.5
Input radius of Circle 2: 2.1
Area of Circle 2 = 13.8474
Input radius of Circle 3: 5.7
Area of Circle 3 = 102.019
Input radius of Circle 4: 1.1
Area of Circle 4 = 3.7994

Các bạn có thể xem lại bài Sự tương quan giữa con trỏ và mảng trong C++ để nắm được tại sao có thể sử dụng con trỏ để lưu mảng.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Truyền đối tượng (object) vào hàm (function) trong C++Các thành phần tĩnh (static member) trong lớp (class) >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.