Bài giảng lập trình hướng đối tượng c++‎ chương 5 hàm xây dựng, hàm hủy và việc khởi tạo đối tượng

20 3 0
Bài giảng lập trình hướng đối tượng c++‎   chương 5 hàm xây dựng, hàm hủy và việc khởi tạo đối tượng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 28/12/2021, 19:14

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan