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
lượt xem 9
download
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 cung cấp cho người học những kiến thức như: 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 1 lớp là đối tượng. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: 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
- Chương 5 HÀM XÂY DỰNG, HÀM HỦY VÀ VIỆC KHỞI TẠO ĐỐI TƯỢNG 1
- Nội dung • 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 1 lớp là đối tượng 2
- 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 các thuộc tính. – Cấp vùng nhớ cho con trỏ thành viên. class Diem { class PhanSo { int x, y; int tu, mau; public: public: Diem(int a) PhanSo() { x = y = a; } { tu=0; mau=1; } Diem(int h, int t) PhanSo(int x) { x = h; y=t; } { tu=x; mau=1; } …. PhanSo(int t, int m) }; { tu = t; mau=m; } …. }; 3
- 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 con trỏ strcpy(mssv,””); soluong = max; hoten = new char[50]; vitri = 0; namsinh = 1980; ds = new diemtb = 0; float[soluong]; } } SinhVien(char*,char*,int,fl Stack(float* d, int m, oat); int n); … … }; }; 4
- Hàm xây dựng • Nếu không có định nghĩa 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ố. – Chỉ có 1 cách khởi tạo đối tượng theo dạng không tham số. class Diem { void main() { int x, y; Diem a; public: Diem *pa = new Diem(); void InDiem(); Diem ds1[10]; void NhapDiem(); Diem *ds2 = new void GanGiaTri(int, Diem[20]; int); … int GiaTriX(); } int GiaTriY(); 1000H … x … Không có giá trị }; y … đầu // Định nghĩa các hàm a nên dễ gây ra thành viên hiệu ứng phụ5 ...
- Hàm xây dựng • Nếu có định nghĩa ít nhất 1 hàm xây dựng: – Có bao nhiêu hàm xây dựng sẽ có bấy 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(); PhanSo *pa = new PhanSo; Stack *pb = new Stack(40); PhanSo *pa1 = new PhanSo(); Stack *pc = new Stack[40]; PhanSo *pa2 = new PhanSo[5]; float data[40]; PhanSo *pb = new PhanSo(3); for(int i=0;i
- Hàm xây dựng • Trình tự thực hiện: – Đối tượng được tạo ra trước. – Hàm xây dựng sẽ gọi sau trên đối tượng. PhanSo c(2,5); tu tu 2 mau mau 5 c c PhanSo 1000H 1000H *pa2 = new 100 tu 100 tu 0 0 0 0 0 0 mau 0 mau 1 1 1 1 1 PhanSo[5]; *pa2 *pa2 1200H 120 … *ds *ds 0 Stack soluong … soluong 5 b(5); … 0 vitri vitri 7
- Hàm hủy • Mục đích: thu hồi vùng nhớ đã cấp cho con trỏ là dữ liệu thành viên => delete con trỏ. class SinhVien { class Stack { char mssv[8]; float *ds; char* hoten; int soluong; int namsinh; int vitri; float diemtb; public: public: Stack(int max = 10) { SinhVien() { soluong = max; strcpy(mssv,””); vitri = 0; hoten = new char[50]; ds = new namsinh = 1980; float[soluong]; diemtb = 0; } } ~SinhVien() { ~Stack() { delete[] hoten; } delete[] ds; } … … }; }; 8
- Hàm hủy • Thứ tự thực hiện: gọi trước khi hủy đối tượng: – Kết thúc 1 hàm mà trong đó ta có khởi tạo đối tượng. – Thu hồi vùng nhớ cho con trỏ đối tượng. Hàm xây dựng được gọi void HamMinhHoa() { Hàm hủy được gọi cho Stack a; đối tượng mà pa đang trỏ Stack *pa = new Stack(8); tới … Hàm xây dựng được gọi 5 delete pa; lần 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
- Hàm xây dựng sao chép • Tại sao cần hàm xây dựng sao chép? – Khởi tạo 1 đối tượng có giá trị giống 1 đố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 sao chép: – Ngôn ngữ sẽ tự động tạo ra cho ta: nội dung là gán (=) tương ứng từng thành phần. – Không chính xác khi có dữ liệu thành viên là con trỏ. 10
- Hàm xây dựng sao chép 130 1300H Stack a(8); *ds 0 … soluong 8 4 3.2 1.4 … 3 vitri 2 con trỏ sẽ a 130 trỏ *ds 0 8 cùng 1 địa chỉ Stack b(a); soluong 3 nếu không vitri b định nghĩa hàm xây dựng sao chép
- Hàm xây dựng sao 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 các thành phần dữ liệu (không là con trỏ). – 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; mau=p.mau; } 12
- Hàm xây dựng sao chép • Ví dụ: SinhVien nva; … class SinhVien { \ 1 9 2 0 8 9 1 0 mssv[] char mssv[8]; 1240 *hoten char* hoten; 1974 namsinh int namsinh; 1 8.14 diemtb float diemtb; 2 public: 24 c… … 70 N g u y e n … o SinhVien(const SinhVien& s){ 6H strcpy(mssv, s.mssv); N0 g u y e n … … p hoten = new char[50]; y H strcpy(hoten, s.hoten); 1 9 2 0 8 9 1 0 \ mssv[] namsinh = s.namsinh; 2760 *hoten diemtb = s.diemtb; 1974 namsinh } 8.14 diemtb … SinhVien x(nva); }; 13
- Hàm xây dựng sao chép • Ví dụ: class Stack { 1 Stack a(8);3… float *ds; int soluong; *ds 130 0 0 3 1 int vitri; soluong 8 04 2. 4. … … public: vitri 3 H … a Stack(const Stack& s) { copy soluong = s.soluong; vitri = s.vitri; *ds 157 0 1 3 1 ds = new float[soluong]; soluong 8 54 2. 4. … … for(int i=0; i
- Hàm xây dựng sao chép • Sử dụng trong các trường hợp: – Đối tượng được truyền theo giá trị của đối số 1 hàm. – Trị trả về của hàm là 1 đối tượng. – Tạo ra 1 đối tượng có giá trị giống 1 đối tượng cho trước. class A { A HamThu(A x) { int x; A y(x); public: return y; Có bao A() { x=0; } } nhiêu hàm A(const A& a) { xây dựng x=a.x; void main() { sao chép } A a,b; được gọi? void Hien() { b = HamThu(a); cout
- Thuộc tính của 1 lớp là đối tượng • Giới thiệu: – Thuộc tính của 1 lớp có thể có kiểu bất kỳ. – Thuộc tính của 1 lớp có thể là đối tượng của 1 lớp khác. Sử dụng lại 1 lớp, nhưng không phải là thừa kế class Diem { class DuongTron { int x, y; Diem tam; public : int bankinh; Diem(); public: Diem(int , int); DuongTron(); ... void Nhap(); void Ve(); void Hien(); void Nhap(); void DoiDiem(int,int); void DoiDTron(int,int); int GiaTriX(); float ChuVi(); int GiaTriY(); float DienTich(); }; }; 16
- Thuộc tính của 1 lớp là đối tượng • Cách truy xuất: – Khi truy xuất đến thuộc tính là đối tượng, phải thông qua tên của thuộc tính. – Lưu ý đến thuộc tính truy cập (public, private, …) của thành phần dữ liệu và hàm thành viên của lớp tạo ra đối tượng đó để truy xuất hợp lý.
- Thuộc tính của 1 lớp là đối tượng Void DuongTron::Ve() { cout
- Thuộc tính của 1 lớp là đối tượng • Hàm xây dựng: – Phải khởi tạo cho thuộc tính là đối tượng theo dạng hàm xây dựng của lớp đó. DuongTron() : tam() { bankinh=0; } DuongTron(Diem d, int bk) : tam(d) { bankinh=bk; } DuongTron(int x, int y, int bk) : tam(x,y) { bankinh=bk; } DuongTron(const DuongTron& d): tam(d.tam) {bankinh=d.bankinh;} 19
- Thuộc tính của 1 lớp là đối tượng • Hàm xây dựng: ■ Nếu có nhiều thuộc tính là đối tượng, khởi tạo các đối tượng này liên tiếp nhau thông qua dấu phẩy (,). ■ Cú pháp này cho phép áp dụng cả với thuộc tính thường. Duongtron(): tam(), bankinh(0) {} Duongtron(Diem d, int bk) : tam(d), bankinh(bk) {} 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 141 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 101 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 88 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 105 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 16 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn