Lập trình C++ - Mảng đối tượng

Mảng đối tượng trong C++

Mảng các đối tượng cũng có thể được khai báo và sử dụng như mảng của các biến có kiểu thông thường. 
Khai báo mảng tĩnh các đối tượng 
Mảng các đối tượng được khai báo theo cú pháp: 

<Tên lớp> <Tên biến mảng>[<Số lượng đối tượng>]; 

Ví dụ: 

Car cars[10]; 

Là khai báo một mảng có 10 đối tượng có cùng kiểu lớp Car. 
Lưu ý: 

  • Có thể khai báo mảng tĩnh các đối tượng mà chưa cần khai báo độ dài mảng, cách này thường dùng khi chưa biết chính xác độ dài mảng: Car cars[]; 
  •  Muốn khai báo được mảng tĩnh các đối tượng, lớp tương ứng phải có hàm khởi tạo không có tham số. Vì khi khai báo mảng, tương đương với khai báo một dãy các đối tượng với hàm khởi tạo không có tham số. 

Khai báo mảng động với con trỏ 
Một mảng các đối tượng cũng có thể được khai báo và cấp phát động thông qua con trỏ đối tượng như sau: 

<Tên lớp> *<Tên biến mảng động> = new <Tên lớp>[<Độ dài mảng>]; 

Ví dụ: 

Car *cars = new Car[10]; 

Sau khi được sử dụng, mảng động các đối tượng cũng cần phải giải phóng bộ nhớ: 

delete [] <Tên biến mảng động>; 

Ví dụ: 

Car *cars = new Car[10];// Khai báo và cấp phát động 
…                 // Sử dụng biến mảng động 
delete [] cars;      // Giải phóng bộ nhớ của mảng động 

Sử dụng mảng đối tượng 
Khi truy nhập vào các thành phần của một đối tượng có chỉ số xác định trong mảng đã khai báo, ta có thể sử dụng cú pháp: 

<Tên biến mảng>[<Chỉ số đối tượng>].<Tên thành phần>([<Các đối số>]); 

Ví dụ: 
Car cars[10]; cars[5].show(); sẽ thực hiện phương thức show() của đối tượng có chỉ số thứ 5 (tính từ chỉ số 0) trong mảng cars. 
Chương trình sau sẽ cài đặt một chương trình, trong đó nhập vào độ dài mảng, sau đó yêu cầu người dùng nhập thông tin về mảng các xe. Cuối cùng, chương trình sẽ tìm kiếm và hiển thị thông tin về chiếc xe có giá đắt nhất trong mảng. 

#include<iostream>
#include<string>

using namespace std;
/* Định nghĩa lớp */
class Car {
private:
	int  speed;               // Tốc độ  
	string  mark;           // Nhãn hiệu
	float price;               // Giá xe 
public:
	void	setSpeed(int);     // Gán tốc độ cho xe
	int		getSpeed();           // Lấy tốc độ xe    
	void	setMark(string);      // Gán nhãn cho xe     
	string 	getMark();           // Lấy nhãn xe      
	void	setPrice(float);      // Gán giá cho xe     
	float	getPrice();           // Lấy giá xe
	void	init(int, string, float);// Khởi tạo thông tin về xe
	void	show();               // Hiển thị thông tin về xe
};

/* Khai báo phương thức bên ngoài lớp */
void Car::setSpeed(int speedIn) { // Gán tốc độ cho xe   
	speed = speedIn;
}

int Car::getSpeed() {           // Lấy tốc độ xe       
	return speed;
}

void Car::setMark(string markIn) {     // Gán nhãn cho xe      
	mark = markIn;
}

string Car::getMark() {           // Lấy nhãn xe      
	return mark;
}
void Car::setPrice(float priceIn) { // Gán giá cho xe      
	price = priceIn;
}
float Car::getPrice() {           // Lấy giá xe    
	return price;
}
void Car::init(int speedIn, string markIn, float priceIn) {
	speed = speedIn;
	mark = markIn;
	price = priceIn;
	return;
}

void Car::show() {                // Phương thức hiển thị xe
	cout << "This is a " << mark 
<< " having a speed of  " << speed << "km/h and its price is $" << price << endl;
	return;
}

// Hàm main, chuong trình chính 
int main() {

	int length;  	 	 	// Chiều dài mảng  	
	float maxPrice = 0; 	 	// Giá đắt nhất 
	int index = 0;  	 	// Chỉ số của xe đắt nhất 
	Car *cars;  	 	 	// Khai báo mảng đối tượng 
							// Nhập số lượng xe, tức là chiều dài mảng  	
	cout << "So luong xe: ";  	
	cin >> length; 
	// Cấp phát bộ nhớ động cho mảng  	
	cars = new Car[length]; 
	// Khởi tạo các đối tượng trong mảng  	
	for(int i=0;i<length; i++){ 
		int speed;  	 	// (Biến tạm) tốc độ  	 	
		string mark;  	// (Biến tạm) nhãn hiệu  	 	
		float price; 	 	// (Biến tạm) giá xe  	 	
		cout << "Xe thu " << i << ": " <<endl;  	 	
		cout << "Toc do (km/h): ";  
		cin >> speed; 
		cars[i].setSpeed(speed); // Nhập tốc độ 
		cout << "Nhan hieu : "; 
		cin >> mark; 
		cars[i].setMark(mark);  	// Nhập nhãn xe 
		cout << "Gia ($): "; 
		cin >> price; 
		cars[i].setPrice(price); // Nhập giá xe 
		if (maxPrice < price) {
			maxPrice = price;  	
            index = i;
		}
	}

// Tìm xe đắt nhất 
	for(int i=0; i<length; i++)  	
		if(i == index){ 
		cars[i].show(); // Giới thiệu xe đắt nhất  	 	
		break; 
		}
	// Giải phóng bộ nhớ của mảng 
	delete [] cars; 
	system("pause");
	return 0;
}

Kết quả:

So luong xe: 3
Xe thu 0:
Toc do (km/h): 100
Nhan hieu : Toyota
Gia ($): 2000
Xe thu 1:
Toc do (km/h): 110
Nhan hieu : Honda
Gia ($): 2200
Xe thu 2:
Toc do (km/h): 120
Nhan hieu : Kia
Gia ($): 1900
This is a Honda having a speed of  110km/h and its price is $2200