Lập trình hướng đối tượng bài 6
- 22 trang
- file .pdf
Khoa CNTT LTHĐT
Chương 6
TOÁN TỬ GÁN (operator=)
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 1
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
0. MỤC TIÊU
Hiểu được phương thức toán tử
gán là gì?
Hiểu được vai trò của toán tử
gán trong lập trình hướng đối
tượng
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 2
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
1. KHÁI NIỆM
− Toán tử gán trong lập trình C
được sử dụng để gán giá trị của
biến này cho biến khác.
− Mở rộng cho C++ và các ngôn
ngữ lập trình hướng đối tượng
khác ta có thể nói như sau: Toán
tử gán được sử dụng để gán
thành phần dữ liệu của đối
tượng này cho đối tượng
khác.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 3
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
2. ĐẶT VẤN ĐỀ
− Hãy khai báo và định nghĩa các
phương thức cần thiết để các
câu lệnh sau có thể thực hiện
− Đoạn chương trình
CHocSinh a,b;
a.Nhap();
b=a;
b.Xuat();
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 4
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Đoạn chương trình
CHocSinh a,b;
a.Nhap();
b=a;
b.Xuat();
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 5
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 6
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 7
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 8
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 9
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Định nghĩa phương thức toán tử gán
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 10
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
4. CÁC GHI CHÚ
QUAN TRỌNG
− Toán tử gán được cài đặt bên
trong lớp CHocSinh như là một
phương thức của lớp.
− Miền giá trị của một biến con trỏ
là địa chỉ ô nhớ.
− Miền giá trị của một con trỏ đối
tượng là địa chỉ ô nhớ.
− Bên trong thân của một phương
thức, this là một con trỏ đối
tượng thuộc về lớp mà phương
thức đó thuộc về.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 11
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
4. CÁC GHI CHÚ
QUAN TRỌNG
−Bên trong thân của một phương
thức, this là một con trỏ đối
tượng thuộc về lớp mà phương
thức đó thuộc về.
+ Ví dụ 01: Bên trong thân
phương thức nhap của lớp
CPhanSo, this là con trỏ đối
tượng thuộc về lớp CPhanSo.
+ Ví dụ 02: Bên trong thân
phương thức xuất của lớp
CDiem, this là con trỏ đối
tượng thuộc về lớp CDiem.
+ Ví dụ 03: Bên trong thân
phương thức operator = của
lớp CHocSinh, this là con trỏ
đối tượng thuộc về lớp
CHocSinh.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 12
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
4. CÁC GHI CHÚ
QUAN TRỌNG
− Bên trong thân phương thức của
một lớp, this là một con trỏ đối
tượng giữ địa chỉ của đối tượng
đang gọi thực hiện phương thức.
− Bên trong thân phương thức của
một lớp, this là một con trỏ đối
tượng giữ địa chỉ của đối tượng
đang gọi thực hiện phương thức.
Hơn nữa *this chính là đối
tượng đang gọi thực hiện
phương thức.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 13
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
− Hướng dẫn sử dụng 01:
1. CHocSinh a,b;
2. a.nhap();
3. b = a;
− Trong câu lệnh thứ 3 của đoạn
chương trình trên ta nói: đối tượng b
gọi thực hiện phương thức toán tử
gán với tham số là đối tượng a.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 14
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
− Định nghĩa phương thức toán tử gán
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 15
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
− Hướng dẫn sử dụng 02:
1. CHocSinh a,b,c,d,e;
2. e.Nhap();
3. a = b = c = d = e;
− Trong câu lệnh thứ 3 của đoạn
chương trình trên ta nói: nói không
nổi.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 16
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
− Định nghĩa phương thức toán tử gán
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 17
ThS. Nguyễn Tấn Trần Minh Khang
Chương 6
TOÁN TỬ GÁN (operator=)
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 1
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
0. MỤC TIÊU
Hiểu được phương thức toán tử
gán là gì?
Hiểu được vai trò của toán tử
gán trong lập trình hướng đối
tượng
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 2
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
1. KHÁI NIỆM
− Toán tử gán trong lập trình C
được sử dụng để gán giá trị của
biến này cho biến khác.
− Mở rộng cho C++ và các ngôn
ngữ lập trình hướng đối tượng
khác ta có thể nói như sau: Toán
tử gán được sử dụng để gán
thành phần dữ liệu của đối
tượng này cho đối tượng
khác.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 3
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
2. ĐẶT VẤN ĐỀ
− Hãy khai báo và định nghĩa các
phương thức cần thiết để các
câu lệnh sau có thể thực hiện
− Đoạn chương trình
CHocSinh a,b;
a.Nhap();
b=a;
b.Xuat();
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 4
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Đoạn chương trình
CHocSinh a,b;
a.Nhap();
b=a;
b.Xuat();
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 5
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 6
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 7
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 8
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Để giải quyết vấn đề trên ta phải
khai báo và định nghĩa phương
thức toán tử gán cho lớp đối
tượng CHocSinh
− Khai báo lớp
class CHocSinh
{
private:
char hoten[31];
int toan;
int van;
float dtb;
public:
CHocSinh operator=
(CHocSinh &);
};
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 9
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
3. GIẢI QUYẾT VẤN ĐỀ
− Định nghĩa phương thức toán tử gán
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 10
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
4. CÁC GHI CHÚ
QUAN TRỌNG
− Toán tử gán được cài đặt bên
trong lớp CHocSinh như là một
phương thức của lớp.
− Miền giá trị của một biến con trỏ
là địa chỉ ô nhớ.
− Miền giá trị của một con trỏ đối
tượng là địa chỉ ô nhớ.
− Bên trong thân của một phương
thức, this là một con trỏ đối
tượng thuộc về lớp mà phương
thức đó thuộc về.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 11
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
4. CÁC GHI CHÚ
QUAN TRỌNG
−Bên trong thân của một phương
thức, this là một con trỏ đối
tượng thuộc về lớp mà phương
thức đó thuộc về.
+ Ví dụ 01: Bên trong thân
phương thức nhap của lớp
CPhanSo, this là con trỏ đối
tượng thuộc về lớp CPhanSo.
+ Ví dụ 02: Bên trong thân
phương thức xuất của lớp
CDiem, this là con trỏ đối
tượng thuộc về lớp CDiem.
+ Ví dụ 03: Bên trong thân
phương thức operator = của
lớp CHocSinh, this là con trỏ
đối tượng thuộc về lớp
CHocSinh.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 12
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
4. CÁC GHI CHÚ
QUAN TRỌNG
− Bên trong thân phương thức của
một lớp, this là một con trỏ đối
tượng giữ địa chỉ của đối tượng
đang gọi thực hiện phương thức.
− Bên trong thân phương thức của
một lớp, this là một con trỏ đối
tượng giữ địa chỉ của đối tượng
đang gọi thực hiện phương thức.
Hơn nữa *this chính là đối
tượng đang gọi thực hiện
phương thức.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 13
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
− Hướng dẫn sử dụng 01:
1. CHocSinh a,b;
2. a.nhap();
3. b = a;
− Trong câu lệnh thứ 3 của đoạn
chương trình trên ta nói: đối tượng b
gọi thực hiện phương thức toán tử
gán với tham số là đối tượng a.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 14
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
− Định nghĩa phương thức toán tử gán
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 15
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
− Hướng dẫn sử dụng 02:
1. CHocSinh a,b,c,d,e;
2. e.Nhap();
3. a = b = c = d = e;
− Trong câu lệnh thứ 3 của đoạn
chương trình trên ta nói: nói không
nổi.
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 16
ThS. Nguyễn Tấn Trần Minh Khang
Khoa CNTT LTHĐT
5. HƯỚNG DẪN SỬ DỤNG
− Định nghĩa phương thức toán tử gán
CHocSinh CHocSinh::operator=
(CHocSinh&x)
{
strcpy(hoten,x.hoten);
toan = x.toan;
van = x.van;
dtb = x.dtb;
return *this;
}
GV. Nguy ễn Sơn Hoàng Quốc
Chương 06 - 17
ThS. Nguyễn Tấn Trần Minh Khang