TẠO 1 ĐỐI TƯỢNG BẰNG CÁCH KHAI BÁO BIẾNy Dùng phương thức thiết lập chuẩn... TẠO NHIỀU ĐỐI TƯỢNG BẰNG CÁCH KHAI BÁO BIẾNy Sử dụng phương thức thiết lập chuẩn... Đối tượng là thành phần c
Trang 1CHƯƠNG
CHƯƠNG 5 CÁC CÁCH TẠO ĐỐI TƯỢNG
1
Trang 2trình sử dụng biến và phương thức static
y Nắm vững khái niệm và cách sử dụng hàm friend
Trang 3NỘI DUNG CHI TIẾT
y CÁCH KHAI BÁO BIẾN
Trang 4TẠO 1 ĐỐI TƯỢNG BẰNG CÁCH KHAI BÁO BIẾN
y Dùng phương thức thiết lập chuẩn
Trang 5TẠO NHIỀU ĐỐI TƯỢNG BẰNG CÁCH KHAI BÁO BIẾN
y Sử dụng phương thức thiết lập chuẩn
Trang 6Đối tượng là thành phần của lớp
y Đối tượng có thể là thành phần của đối tượng khác, khi
được tự động gọi cho các đối tượng thành phần.
y Nếu đối tượng thành phần phải được cung cấp tham số khi thiết lập thì đối tượng kết hợp (đối tượng lớn) phải có
thiết lập thì đối tượng kết hợp (đối tượng lớn) phải có
phương thức thiết lập để cung cấp tham số thiết lập cho các đối tượng thành phần ợ g p
Trang 8Đối tượng là thành phần của lớp
y Cú pháp để khởi tạo đối tượng thành phần là dùng dấu hai
8
chấm (:) theo sau bởi tên thành phần và tham số khởi tạo.
y Khi đối tượng kết hợp bị huỷ đi thì các đối tượng thành
ầ
phần của nó cũng bị huỷ đi, nghĩa là phương thức huỷ bỏ
sẽ được gọi cho các đối tượng thành phần, sau khi phương thức huỷ bỏ của đối tượng kết hợp được gọi
thức huỷ bỏ của đối tượng kết hợp được gọi.
Trang 9class TamGiac
{
Ở ẠO Ố TƯỢNG THÀNH PHẦN, DÙNG DẤU
TamGiac(double xA, double yA, double xB, double yB, double xC, double
yC):A(xA yA) B(xB yB) C(xC yC){}
Trang 10Đối tượng là thành phần của lớp
{ Trong các thành phần của lớp thành phần nào được khai báo
{ Trong các thành phần của lớp, thành phần nào được khai báo trước, phương thức hủy bỏ sẽ thực hiện sau.
Trang 11ĐỐI TƯỢNG LÀ THÀNH PHẦN CỦA MẢNG
Trang 12void reorder( SEQUENCE*, int );
void out( SEQUENCE*, int );
};
Trang 13Từ đó
13class MAIN{
Trang 15- Lớp không có phương thức thiết lập.
Lớp có phương thứcCÁC PHẦN TỬ PHẢI CÓ KHẢ NĂNG
TỰ KHỞI TẠO
– Lớp có phương thức thiết lập không tham số.– Lớp có phương thức thiết lập mà mọi tham số
Trang 16class Diem {
double x,y;
public:
class String {char *p;
Trang 17class Diem
{
double x,y;
class String{
Trang 18class Diem
{
d bl
class String{
SinhVien(char *ht, char *ms, int ns):HoTen(ht),MaSo(ms), NamSinh(ns){}
SinhVien():HoTen(“Nguyen Van A”), MaSo(“19920014”),NamSinh(1982){}
tham số
//
};
Trang 19ĐỐI TƯỢNG ĐƯỢC CẤP PHÁT ĐỘNG
y Đối tượng được cấp phát động là các đối tượng được tạo
19
ợ g ợ p p ộ g ợ g ợ ạ
ra bằng phép toán new và bị huỷ đi bằng phép toán delete
y Phép toán new cấp đối tượng trong vùng heap (hay vùng
y Dùng new và delete cũng có thể cấp nhiều đối tượng và
y Dùng new và delete cũng có thể cấp nhiều đối tượng và huỷ nhiều đối tượng
Trang 20CẤP VÀ HỦY 1 ĐỐI TƯỢNG
class Diem { class String {char *p;
20
{double x,y;
int *pi = new int;
int *pj = new int(15);
Diem *pd = new Diem(20,40);
String *pa = new String("Nguyen Van A");g p g( g y );
//
Trang 21CẤP VÀ HỦY NHIỀU ĐỐI TƯỢNG
y Trong trường hợp cấp nhiều đối tượng, ta không thể cung
21
cấp tham số cho từng phần tử được cấp:
y int *pai = new int[10];
y Diem *pad = new Diem[5]; // Bao sai
y String *pas = new String[5]; // Bao sai
y Lỗi trên được khắc phục bằng cách cung cấp phương thức thiết lập để đối tượng có khả năng tự khởi tạo.
Trang 22CẤP VÀ HỦY NHIỀU ĐỐI TƯỢNG
class String
khởi độ ới ù iá t ị
khởi động với cùng giá trị
int *pai = new int[10];
Diem *pad = new Diem[5];
// ca 5 diem co cung toa do (0,0)String(const String &s) {p = strdup(s.p);}
~String() {delete [] p;}
//
};
// ca 5 d e co cu g toa do (0,0)
String *pas = new String[5];
// Ca 5 chuoi cung duoc khoi dong bang
– delete [] pai;
Trang 23Lớp có dữ liệu static
23
y Nhằm để các đối tượng của lớp cùng chia sẻ vùng bộ ợ g p g g ộ nhớ
y Dữ liệu static còn gọi là thành viên tĩnh của lớp
y Trong ngôn ngữ lập trình hướng đối tượng, loại thành
viên này thường được gọi là biến lớp (class variables)
Trang 25Lớp có phương thức static
25
y Phương thức static là phương thức có thể gọi thực g p g gọ ự
hiện ngay cả khi chưa tạo đối tượng thuộc lớp
y Phương thức static là phương thức để cho các đối
tượng của lớp cùng chia sẻ
y Chẳng hạn, như trong ví dụ trên, phương thức
b P () numberPerson().
Trang 26Phương thức static các đối tượng của lớp cùng chia sẻ
Khô ầ hỉđịnh đối tượng cũng có thể gọi được hàm staticợ
Trang 29HÀM FRIEND
Tôi không được vào nhà của Mai
không ai được
được vào nhà của MaiFriend
Trúc là
bạn tôi
Trang 31Hàm tự do là friend của 1 lớp
Hàm kt_trung là hàm tự do (không thuộc class nào) nên không thể truy cập vào thành
hầ i t ( à ) ủ l
31
phần private (x và y) của class
point
Trang 32Hàm kt_trung là hàm tự do (không thuộc class nào) nhưng là bạn (friend) của class point nên
ó thể t ậ à thà h hầ
32
có thể truy cập vào thành phần private (x và y) của class point
Trang 33Hàm thành phần của một lớp là bạn của một lớp khác
Hàm f muốn truy xuất thành phần
33
thành phần private và protect của class A
…
class A
{
class B{
…
friend int B::f(…);
… };
…
}
int f(….);
…}
};
int B::f(….) {
…….
Trang 34Hàm bạn của nhiều lớp
class A{
….
Hàm f muốn truy xuất thành phần
void f(A,B)
class B{
… friend void B f(A,B);
… };
Trang 35vi của lớp được quyền truy cập đến những thành viên
có thuộc tính private, protected của một lớp khác
y Chẳng hạn, các hành vi của lớp A, muốn truy cập những thành viên private, protected của lớp B, thì trong lớp B phải mô tả lớp A có thuộc tính là friend
trong lớp B phải mô tả lớp A có thuộc tính là friend.
Trang 37TÓM TẮT
37