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