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.