Toán tử new để cấp phát bộ nhớ

Một phần của tài liệu Giáo trình Lập trình hướng đối tượng (Nghề Lập trình máy tính): Phần 1 - Tổng cục dạy nghề (Trang 50 - 52)

Toán tử new thay cho hàm malloc() và calloc() của C có cú pháp như sau: new Tên kiểu ;

hoặc new (Tên kiểu);

Trong đó Tên kiểu là kiểu dữ liệu của biến con trỏ, nó có thể là: các kiểu dữ liệu chuẩn như int, float, double, char,... hoặc các kiểu do người lập trình định nghĩa như mảng, cấu trúc, lớp,...

Chú ý: Để cấp phát bộ nhớ cho mảng một chiều, dùng cú pháp như sau:

Biến con trỏ = new kiểu[n];

Trong đó n là số nguyên dương xác định số phần tử của mảng.

Ví dụ: float *p = new float; //cấp phát bộ nhớ cho biến con trỏ p có kiểu int int *a = new int[100]; //cấp phát bộ nhớ để lưu trữ mảng một chiều a

// gồm 100 phần tử

Khi sử dụng toán tử new để cấp phát bộ nhớ, nếu không đủ bộ nhớ để cấp phát, new sẽ trả lại giá trị NULL cho con trỏ. Đoạn chương trình sau minh họa cách kiểm tra lỗi cấp phát bộ nhớ:

double *p; int n; cout<< “\n So phan tu : ”; cin>>n; p = new double[n] if (p == NULL) {

cout << “Loi cap phat bo nho”; exit(0);

}

3.9.2 Toán tử delete

Toán tử delete thay cho hàm free() của C, nó có cú pháp như sau: delete con trỏ ;

Ví dụ: Chương trình sau minh hoạ cách dùng new để cấp phát bộ nhớ chứa n thí

sinh. Mỗi thí sinh là một cấu trúc gồm các trường ht(họ tên), sobd(số báo danh), và td(tổng điểm). Chương trình sẽ nhập n, cấp phát bộ nhớ chứa n thí sinh, kiểm tra lỗi cấp phát bộ nhớ, nhập n thí sinh, sắp xếp thí sinh theo thứ tự giảm của tổng điểm, in danh sách thí sinh sau khi sắp xếp, giải phóng bộ nhớ đã cấp phát. #include <iomanip.h> #include <iostream.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> struct TS { char ht[20]; long sobd; float td; }; void main(void) { TS *ts; int n;

cout<<"\nSo thi sinh n = "; cin>>n;

ts = new TS[n+1]; if (ts == NULL) {

cout << "\n Loi cap phat vung nho"; getch();

exit(0); }

for (int i=0;i<n;++i) {

cout << "\n Thi sinh thu "<<i; cout<< "\n Ho ten";

cin.ignore(1); cin.get (ts[i].ht,20); cout << "so bao danh"; cin>> ts[i].sobd;

cout<< "tong diem:"; cin>>ts[i].td;

for (i=0;i<n-1;++i) for (int j=i+1;j<n;++j) if (ts[i].td<ts[j].td) { TS tg=ts[i]; ts[i]=ts[j]; ts[j]=tg; } cout << setiosflags(ios::showpoint)<<setprecision(1); for (i=0;i<n;++i) cout << "\n" << setw(20)<<ts[i].ht<<setw(6)<<ts[i].td; delete ts; getch(); } Bài tập:

Bài 1: Xây dựng chương trình cho phép nhập vào một danh sách nhân viên, thông tin về nhân viên gồm mã nhân viên, họ và tên, ngày sinh, lương và phụ cấp. Bài 2: Viết chương trình nhập vào một danh sách sinh viên, thông tin về sinh viên gồm mã sinh viên, họ tên, ngày sinh, điểm lý thuyết, điểm thực hành. Sắp xếp danh sách sinh viên theo thứ tự giảm dần tổng điểm và xuất ra màn hình.

BÀI 4

Một phần của tài liệu Giáo trình Lập trình hướng đối tượng (Nghề Lập trình máy tính): Phần 1 - Tổng cục dạy nghề (Trang 50 - 52)

Tải bản đầy đủ (PDF)

(68 trang)