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

5 184 0
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)

Thông tin tài liệu

Nội dung • Hàm xây dựng Chương HÀM XÂY DỰNG, HÀM HỦY VÀ VIỆC KHỞI TẠO ðỐI TƯỢ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 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 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; } … }; class SinhVien { class Stack { char mssv[8]; float *ds; char* hoten; int soluong; int namsinh; int vitri; float diemtb; public: public: Cấp vùng nhớ Stack(int max = 10) SinhVien() { { cho trỏ strcpy(mssv,””); soluong = max; hoten = new char[50]; vitri = 0; namsinh = 1980; ds = new float[soluong]; diemtb = 0; } } SinhVien(char*,char*,int,fl Stack(float* d, int m, int n); oat); … … }; }; Hàm xây dựng Hàm xây dựng • Nếu ñịnh nghĩa hàm xây dựng: • Nếu 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 – Hàm xây dựng gọi sau ñối tượng tu mau PhanSo c(2,5); tu 1000 mau *pa2 c 1000H tu 0 0 1000 mau 1 1 *pa2 tu mau c 1000H 1200H Stack b(5); *ds soluong vitri 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 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 Hàm xây dựng chép • 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 • 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 – Thu hồi vùng nhớ cho trỏ ñối tượng – Khác với phép gán (dấu =) Hàm xây dựng ñược gọi void HamMinhHoa() { Stack a; Stack *pa = new Stack(8); … delete pa; Stack *pb = new Stack[5]; … delete[] pb; pb = new Stack(20); … } • Nếu không ñịnh nghĩa hàm xây dựng chép: Hàm hủy ñược gọi cho ñối tượng mà pa ñang trỏ tới – Ngôn ngữ tự ñộng tạo cho ta: nội dung gán (=) tương ứng thành phần Hàm xây dựng ñược gọi lần – Không xác có liệu thành viên trỏ Hàm hủy ñược gọi lần Hàm xây dựng ñược gọi Hàm hủy ñược gọi cho a trước kết thúc hàm HamMinhHoa() Hàm xây dựng chép 10 Hàm xây dựng chép • Cú pháp: (const const & & Stack a(8); … *ds 1300 soluong vitri a Stack b(a); { Nội dung hàm } 1300H *ds 1300 soluong vitri b ) 3.2 1.4 … VD: Diem(const Diem& d) { … } Stack(const Stack& s) { … } trỏ trỏ ñịa không ñịnh nghĩa hàm xây dựng chép 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 Hàm xây dựng chép • Ví dụ: • Ví dụ: SinhVien nva; … 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; } … }; 9 \0 1240 1974 8.14 mssv[] *hoten namsinh diemtb 1240H N g u y e n 2760H N g … … copy u y e n 9 \0 2760 1974 8.14 SinhVien x(nva); … … mssv[] *hoten namsinh diemtb class Stack { Stack a(8); … float *ds; *ds 1300 1300H int soluong; 3.2 1.4 … … soluong int vitri; vitri public: a … copy Stack(const Stack& s) { soluong = s.soluong; *ds 1570 vitri = s.vitri; 3.2 1.4 … … soluong ds = new float[soluong]; 1570H vitri for(int i=0; i

Ngày đăng: 30/01/2016, 10:51

Từ khóa liên quan

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

Tài liệu liên quan