1. Trang chủ
  2. » Công Nghệ Thông Tin

HÀM XÂY DỰNG, HÀM HỦY VÀ ViỆC KHỞI TẠO ĐỐI TƯỢNG

16 639 2

Đ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

Cấu trúc

  • HÀM XÂY DỰNG, HÀM HỦY VÀ ViỆC KHỞI TẠO ĐỐI TƯỢNG

  • Hàm xây dựng

  • Slide 3

  • Slide 4

  • Slide 5

  • Slide 6

  • Hàm hủy

  • Slide 8

  • Hàm xây dựng sao chép

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Thuộc tính của 1 lớp là đối tượng

  • Slide 15

  • Slide 16

Nội dung

Nguyễn Công Huy – Khoa CNTT&TT 1 HÀM XÂY DỰNG, HÀM HỦY VÀ HÀM XÂY DỰNG, HÀM HỦY VÀ ViỆC KHỞI TẠO ĐỐI TƯỢNG ViỆC KHỞI TẠO ĐỐI TƯỢNG  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 Nguyễn Công Huy – Khoa CNTT&TT 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  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 { 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; } …. }; Nguyễn Công Huy – Khoa CNTT&TT 3 Hàm xây dựng Hàm xây dựng  Ví dụ: class SinhVien { char mssv[8]; char* hoten; int namsinh; float diemtb; public: SinhVien() { strcpy(mssv,””); hoten = new char[50]; namsinh = 1980; diemtb = 0; } SinhVien(char*,char*,int,float); … }; class Stack { float *ds; int soluong; int vitri; public: Stack(int max = 10) { soluong = max; vitri = 0; ds = new float[soluong]; } Stack(float* d, int m, int n); … }; Cấp vùng nhớ cho con trỏ Nguyễn Công Huy – Khoa CNTT&TT 4 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:  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 { int x, y; public: void InDiem(); void NhapDiem(); void GanGiaTri(int, int); int GiaTriX(); int GiaTriY(); … }; // Định nghĩa các hàm thành viên … … … a x y 1000H void main() { Diem a; Diem *pa = new Diem(); Diem ds1[10]; Diem *ds2 = new Diem[20]; … } Không có giá trị đầu nên dễ gây ra hiệu ứng phụ Nguyễn Công Huy – Khoa CNTT&TT 5 Hàm xây dựng 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() { PhanSo a; PhanSo b(3); PhanSo c(2,5); PhanSo d[3]; PhanSo *pa = new PhanSo; PhanSo *pa1 = new PhanSo(); PhanSo *pa2 = new PhanSo[5]; PhanSo *pb = new PhanSo(3); PhanSo *pc = new PhanSo(2,5); … } void main() { Stack a; Stack b(5); Stack c[5]; Stack *pa = new Stack(); Stack *pb = new Stack(40); Stack *pc = new Stack[40]; float data[40]; for(int i=0;i<10;i++) data[i]=i; Stack d(data, 30, 10); … } Nguyễn Công Huy – Khoa CNTT&TT 6 Hàm xây dựng 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. c tu mau 2 2 5 5 c tu mau PhanSo c(2,5); PhanSo *pa2 = new PhanSo[5]; tu mau 1000H *pa2 1000 tu mau 1000H *pa2 1000 0 1 0 1 0 1 0 1 0 1 0 1200 5 *ds soluong vitri 1200H Stack b(5); *ds soluong vitri … … … Nguyễn Công Huy – Khoa CNTT&TT 7 Hàm hủy 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 { 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; } … }; Nguyễn Công Huy – Khoa CNTT&TT 8 Hàm hủy 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. void HamMinhHoa() { Stack a; Stack *pa = new Stack(8); … delete pa; Stack *pb = new Stack[5]; … delete[] pb; pb = new Stack(20); … } Hàm xây dựng được gọi Hàm hủy được gọi cho đối tượng mà pa pa đang trỏ tới Hàm xây dựng được gọi 5 lần 5 lần Hàm hủy được gọi 5 lần 5 lần Hàm hủy được gọi cho a a trước khi kết thúc hàm HamMinhHoa() Hàm xây dựng được gọi Nguyễn Công Huy – Khoa CNTT&TT 9 Hàm xây dựng sao chép 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ỏ. *ds soluong vitri 1300 8 3 4 3.2 1.4 … … … … … 1300H Stack a(8); … a Stack b(a); *ds soluong vitri 1300 8 3 b 2 con trỏ sẽ trỏ cùng 1 địa chỉ nếu không định nghĩa hàm xây dựng sao chép Nguyễn Công Huy – Khoa CNTT&TT 10 Hàm xây dựng sao chép Hàm xây dựng sao chép  Cú pháp: <Tên lớp> ( const const <Tên lớp> & & ) { 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; } [...]... 1570H b Stack b(a); 12 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 { int x; public: A() { x=0; } A (const A& a) { x=a.x; } void Hien() { cout . CNTT&TT 1 HÀM XÂY DỰNG, HÀM HỦY VÀ HÀM XÂY DỰNG, HÀM HỦY VÀ ViỆC KHỞI TẠO ĐỐI TƯỢNG ViỆC KHỞI TẠO ĐỐI TƯỢNG  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 Nguyễn. là đối tượng 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 đó.  Nếu có nhiều thuộc tính là đối tượng, khởi tạo. CNTT&TT 13 Hàm xây dựng sao chép 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

Ngày đăng: 21/10/2014, 19:57

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w