Bài giảng Lập trình hướng đối tượng và C++: Chương 5

Đăng ngày | Thể loại: | Lần tải: 0 | Lần xem: 0 | Page: 5 | FileSize: M | File type: PDF
of x

Bài giảng Lập trình hướng đối tượng và C++: Chương 5. Bài giảng Lập trình hướng đối tượng và C++: Chương 5 Hàm xây dựng, hàm hủy và việc khởi tạo đối tượng trình bày các nội dung sau: 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,.... Giống các thư viện tài liệu khác được bạn đọc giới thiệu hoặc do tìm kiếm lại và chia sẽ lại cho các bạn với mục đích học tập , chúng tôi không thu phí từ bạn đọc ,nếu phát hiện nội dung phi phạm bản quyền hoặc vi phạm pháp luật xin thông báo cho chúng tôi,Ngoài tài liệu này, bạn có thể download tài liệu miễn phí phục vụ tham khảo Có tài liệu tải về thiếu font chữ không hiển thị đúng, có thể máy tính bạn không hỗ trợ font củ, bạn download các font .vntime củ về cài sẽ xem được.

https://tailieumienphi.vn/doc/bai-giang-lap-trinh-huong-doi-tuong-va-c-chuong-5-ieubuq.html

Nội dung


N i dung
• Hàm xây d ng

Chương 5

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 sao chép
• 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.
– 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; }
….
};
3

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)
C p vùng nh
SinhVien() {
{
cho con 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);


};
};
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:

• 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 .
– 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
...

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 ra
hi u ng ph
5

Hàm xây d ng
– Hàm xây d ng s g i sau trên ñ i tư ng.
tu
mau

PhanSo c(2,5);

tu
1000 mau
*pa2

2
5
c
1000H
tu 0 0 0 0 0
1000
mau 1 1 1 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 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; }

8
};

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:
– K t thúc 1 hàm mà trong ñó ta có kh i t o ñ i tư ng.

• 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.

– 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
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 sao chép:

Hàm h y ñư c g i cho
ñ i tư ng mà pa ñang tr t i

– 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.

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 .

Hàm h y ñư c g i 5 l n
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

10

Hàm xây d ng sao chép
• Cú pháp: (const &
const
&

Stack a(8);


*ds 1300
8
soluong
3
vitri
a

Stack b(a);

{ N i dung hàm }

1300H
4

*ds 1300
8
soluong
3
vitri
b

)

3.2

1.4



VD: Diem(const Diem& d) { … }
Stack(const Stack& s) { … }

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

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

Hàm xây d ng sao 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;
}

};

1 9 2 0 8 9 1 \0
1240
1974
8.14

mssv[]
*hoten
namsinh
diemtb

1240H
N

g

u

y

e

n

2760H
N

g





copy
u

y

e

n

1 9 2 0 8 9 1 \0
2760
1974
8.14

SinhVien x(nva);





mssv[]
*hoten
namsinh
diemtb

class Stack {
Stack a(8); …
float
*ds;
*ds 1300
1300H
int
soluong;
4 3.2 1.4 …

soluong 8
int
vitri;
3
vitri
public:
a

copy
Stack(const Stack& s) {
soluong = s.soluong;
*ds 1570
vitri = s.vitri;
4 3.2 1.4 …

soluong 8
ds = new float[soluong];
1570H
3
vitri
for(int i=0; i 1123864

Tài liệu liên quan


Xem thêm