Khai Báo Và Sử Dụng Con Trỏ đối Tượng Trong C++ - Góc Học IT

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.

  • Lớp BufferedInputStream và BufferedOutputStream trong Java
  • Các kỹ thuật lập trình với mảng một chiều và minh họa với C++
  • Sử dụng hàm print_r, var_dump, var_export trong PHP
  • Kỹ thuật cấp phát bộ nhớ động và minh họa với C++
  • Xây dựng danh sách liên kết kép (Doubly Linked List) với con trỏ (pointer)
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) >>

Từ khóa » Khai Báo Mảng Con Trỏ C++