intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Kỹ thuật lập trình: Chương 5 - Trần Quang Hải Bằng

Chia sẻ: Sơn Tùng | Ngày: | Loại File: PDF | Số trang:5

43
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Kỹ thuật lập trình - Chương 5: Hàm xây dựng, hàm hủy và việc khởi tạo các đối tượng" cung cấp cho người học các kiến thức: Hàm xây dựng, hàm hủy, hàm xây dựng sao chép, thuộc tính của một lớp là đối tượng. Mời các bạn cùng tham khảo nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Kỹ thuật lập trình: Chương 5 - Trần Quang Hải Bằng

  1. Nội dung Chương 5 • Hàm xây dựng • Hàm hủy HÀM XÂY DỰNG, HÀM HỦY VÀ • Hàm xây dựng sao chép VIỆC KHỞI TẠO ðỐI TƯỢNG • Thuộc tính của 1 lớp là ñối tượng 1 2 Hàm xây dựng Hàm xây dựng • Mục ñích: khởi tạo giá trị ban ñầu cho ñối tượng • Ví dụ: – Gán giá trị ñầu cho các thuộc tính. class SinhVien { class Stack { char mssv[8]; float *ds; – Cấp vùng nhớ cho con trỏ thành viên. char* hoten; int soluong; int namsinh; int vitri; float diemtb; public: class Diem { class PhanSo { public: Cấp vùng nhớ Stack(int max = 10) int x, y; int tu, mau; SinhVien() { cho con trỏ { public: public: strcpy(mssv,””); soluong = max; Diem(int a) PhanSo() hoten = new char[50]; vitri = 0; { x = y = a; } { tu=0; mau=1; } namsinh = 1980; ds = new Diem(int h, int t) PhanSo(int x) diemtb = 0; float[soluong]; { x = h; y=t; } { tu=x; mau=1; } } } …. PhanSo(int t, int m) SinhVien(char*,char*,int,fl Stack(float* d, int m, }; { tu = t; mau=m; } oat); int n); …. … … }; }; }; 3 4
  2. Hàm xây dựng Hàm xây dựng • Nếu không có ñịnh nghĩa hàm xây dựng: • Nếu có ñịnh nghĩa ít nhất 1 hàm xây dựng: – Mặc nhiên sẽ tự ñộng có 1 hàm xây dựng không tham số. – Có bao nhiêu hàm xây dựng sẽ có bấy nhiêu cách khởi tạo – Chỉ có 1 cách khởi tạo ñối tượng theo dạng không tham số. ñối tượng theo dạng ñã ñịnh nghĩa. class Diem { void main() { int x, y; Diem a; void main() { void main() { public: Diem *pa = new Diem(); PhanSo a; Stack a; void InDiem(); Diem ds1[10]; PhanSo b(3); Stack b(5); void NhapDiem(); Diem *ds2 = new PhanSo c(2,5); Stack c[5]; void GanGiaTri(int, Diem[20]; PhanSo d[3]; Stack *pa = new Stack(); int); … PhanSo *pa = new PhanSo; Stack *pb = new Stack(40); int GiaTriX(); } PhanSo *pa1 = new PhanSo(); Stack *pc = new Stack[40]; int GiaTriY(); PhanSo *pa2 = new PhanSo[5]; float data[40]; … 1000H PhanSo *pb = new PhanSo(3); for(int i=0;i delete con trỏ. • Trình tự thực hiện: – ðối tượng ñược tạo ra trước. class SinhVien { class Stack { – Hàm xây dựng sẽ gọi sau trên ñối tượng. char mssv[8]; float *ds; char* hoten; int soluong; 2 int namsinh; int vitri; PhanSo c(2,5); tu tu 5 float diemtb; public: mau mau c c public: Stack(int max = 10) { 1000H 1000H SinhVien() { soluong = max; PhanSo strcpy(mssv,””); vitri = 0; *pa2 = new tu 1000 tu 0 0 0 0 0 1000 mau mau 1 1 1 1 1 hoten = new char[50]; ds = new PhanSo[5]; *pa2 *pa2 namsinh = 1980; float[soluong]; diemtb = 0; } } 1200H ~SinhVien() { ~Stack() { *ds … *ds 1200 delete[] hoten; } Stack … 5 delete[] ds; } soluong soluong … 0 … … b(5); vitri vitri 7 }; }; 8
  3. Hàm hủy Hàm xây dựng sao chép • Thứ tự thực hiện: gọi trước khi hủy ñối tượng: • Tại sao cần hàm xây dựng sao chép? – Kết thúc 1 hàm mà trong ñó ta có khởi tạo ñối tượng. – Khởi tạo 1 ñối tượng có giá trị giống 1 ñối tượng khác. – Thu hồi vùng nhớ cho con trỏ ñối tượng. – Khác với phép gán (dấu =) Hàm xây dựng ñược gọi • Nếu không ñịnh nghĩa hàm xây dựng sao chép: void HamMinhHoa() { Stack a; Hàm hủy ñược gọi cho – Ngôn ngữ sẽ tự ñộng tạo ra cho ta: nội dung là gán (=) Stack *pa = new Stack(8); ñối tượng mà pa ñang trỏ tới tương ứng từng thành phần. … delete pa; Hàm xây dựng ñược gọi 5 lần – Không chính xác khi có dữ liệu thành viên là con trỏ. Stack *pb = new Stack[5]; … Hàm hủy ñược gọi 5 lần delete[] pb; pb = new Stack(20); Hàm xây dựng ñược gọi … Hàm hủy ñược gọi cho a } trước khi kết thúc hàm HamMinhHoa() 9 10 Hàm xây dựng sao chép Hàm xây dựng sao chép • Cú pháp: (const const & & ) 1300H { Nội dung hàm } Stack a(8); *ds 1300 … soluong 8 4 3.2 1.4 … VD: Diem(const Diem& d) { … } 3 vitri Stack(const Stack& s) { … } a *ds 1300 2 con trỏ sẽ trỏ SinhVien(const SinhVien& sv) { … } soluong 8 cùng 1 ñịa chỉ Stack b(a); 3 nếu không • Nội dung: vitri b ñịnh nghĩa – Gán tương ứng các thành phần dữ liệu (không là con trỏ). hàm xây dựng sao chép – Cấp vùng nhớ và sao chép nội dung vùng nhớ từ ñối tượng cho trước. VD: Diem(const Diem& d) { x=d.x; y=d.y; } PhanSo(const PhanSo& p) { tu=p.tu; 12 mau=p.mau; }
  4. Hàm xây dựng sao chép Hàm xây dựng sao chép • Ví dụ: • Ví dụ: SinhVien nva; … class SinhVien { class Stack { 1 9 2 0 8 9 1 \0 mssv[] Stack a(8); … char mssv[8]; float *ds; char* hoten; 1240 *hoten *ds 1300 1300H int soluong; int namsinh; 1974 namsinh soluong 8 4 3.2 1.4 … … 8.14 int vitri; float diemtb; diemtb vitri 3 public: public: 1240H … a … N g u y e n … … Stack(const Stack& s) { copy SinhVien(const SinhVien& s){ 2760H copy soluong = s.soluong; strcpy(mssv, s.mssv); N g u y e n … … vitri = s.vitri; *ds 1570 hoten = new char[50]; ds = new float[soluong]; soluong 8 4 3.2 1.4 … … strcpy(hoten, s.hoten); 1 9 2 0 8 9 1 \0 mssv[] for(int i=0; i
  5. Thuộc tính của 1 lớp là ñối tượng Thuộc tính của 1 lớp là ñối tượng • Cách truy xuất: Void DuongTron::Ve() { cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
11=>2