Tải bản đầy đủ (.pdf) (22 trang)

Lớp đối tượng và tính đóng gói - Lớp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (43.17 KB, 22 trang )




Chương 2

Lớp, đối tượng và tính đóng gói








Lớp


Hàm tạo, hàm hủy


Tham số của hàm tạo


Nội tuyến tự động


Gán đối tượng


Truyền các đối tượng sang hàm



Trả đối tượng từ hàm


Hàm friend








Chửụng 2
Lụựp
, ẹ
oỏi tửụùng vaứ tớnh ủoựng goựi



17
17


































Chương 2
Lớp
, Đ
ối tượng và tính đóng gói




18
18
I/ Lớp (class)

Cú pháp khai báo lớp

class
class_name
{


private :
// khai báo các biến ;
// khai báo các hàm;

public :
// khai báo các biến ;
// khai báo các hàm;
}
objects_list ;

class_name tên của lớp do người dùng đònh nghiã.
objects_list danh sách các đối tượng, có thể tùy chọn.

Các biến, các hàm khai báo bên trong một lớp gọi là các thành viên của lớp đó.

Từ khoá Ý nghiã
class khai báo một lớp

private : qui đònh các biến, các hàm là các thành viên riêng của lớp, bên
ngoài lớp không thể truy cập được.
public :

qui đònh các biến, các hàm là các thành viên chung của lớp, có
thể truy cập chúng từ các thành viên khác của lớp và bởi các
thành phần khác của chương trình có chứa lớp đó.



Cú pháp đònh nghiã hàm thành viên

data_type class_name :: func_name (arg_list)
{
// body of function
}


data_type kiểu dữ liệu của phương thức trả về
class_name tên lớp chứa hàm
::
toán tử phân giải phạm vi (scope resolution operator)
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



19

19
func_name tên hàm
arg_list danh sách các đối số


Ví dụ 1.1
Khai báo lớp có tên "myclass"

class
myclass
{

// private to myclass
int a;
public:
void set_a(int num);
int get_a();
};

void myclass::set_a(int num)
// đònh nghiã hàm void set_a(int num)
{
a = num;
}

int myclass::get_a()
// đònh nghiã hàm int get_a()
{
return a;
}


int main()
{
myclass ob1, ob2; // khai báo 2 đối tượng có tên ob1, ob2

ob1.set_a(10); // thiết lập giá trò 10 cho bản sao cuả biến a của ob1
ob2.set_a(99); // thiết lập giá trò 99 cho bản sao cuả biến a của ob2

cout << ob1.get_a() << "\n";
cout << ob2.get_a() << "\n";
return 0;
}


Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



20
20
Ví dụ 1.2
Lỗi biên dòch khi truy cập đến biến riêng a từ bên ngoài lớp myclass

int main()
{
myclass ob1, ob2;


ob1.a = 10; // ERROR! cannot access private member
ob2.a = 99; // by non-member functions.
return 0;
}

Ví dụ 1.3
Khi a là biến chung, có thể truy cập a từ bên ngoài lớp myclass
#include <iostream.h>

class myclass {
public:
// now a is public

int a;
// and there is no need for set_a() or get_a()
};

int main()
{
myclass ob1, ob2;

// here, a is accessed directly
ob1.a = 10;
ob2.a = 99;

cout << ob1.a << "\n";
cout << ob2.a << "\n";

return 0;
}




Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



21
21
Ví dụ 1.4
Tạo lớp stack dùng để chứa các ký tự

#include <iostream.h>
#define SIZE 10
// Declare a stack class for characters
class stack {
char stck[SIZE]; // holds the stack
int tos; // index of top-of-stack
public:
void init(); // initialize stack
void push(char ch); // push character on stack
char pop(); // pop character from stack
};

// Initialize the stack
void stack::init()
{

tos = 0;
}

// Push a character.
void stack::push(char ch)
{
if(tos == SIZE) {
cout << "Stack is full";
return;
}
stck[tos] = ch;
tos++;
}

// Pop a character.
char stack::pop()
{
if(tos == 0) {
cout << "Stack is empty";
return 0; // return null on empty stack
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



22
22
}

tos--;
return stck[tos];
}

int main()
{
stack s1, s2; // create two stacks
int i;

// initialize the stacks
s1.init();
s2.init();

s1.push('a');
s2.push('x');
s1.push('b');
s2.push('y');
s1.push('c');
s2.push('z');

for(i=0; i<3; i++) cout << "Pop s1: " << s1.pop() << "\n";
for(i=0; i<3; i++) cout << "Pop s2: " << s2.pop() << "\n";

return 0;
}


@ Kết quả xuất dữ liệu của chương trình ?




Lưu ý
Khai báo lớp là một trừu tượng logic để đònh nghiã một kiểu dữ liệu mới.

Khai báo một đối tượng dựa vào lớp, tạo ra một thực thể vật lý (có điạ chỉ trong bộ
nhớ) có kiểu dữ liệu đó.

Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



23
23
Mỗi đối tượng của một lớp có bản sao riêng của các biến được khai báo trong lớp.


Bài tập I


1. Hãy tạo lớp card để giữ các mục nhập catalog thẻ thư viện, chưá tựa đề sách (kiểu
chuỗi), tên tác giả (kiểu chuỗi) và số bản (kiểu nguyên). Dùng hàm thành viên
chung store() để lưu trữ thông tin về sách và hàm thành viên chung show() để hiển
thò thông tin. Viết chương trình thực hiện yêu cầu trên.

2. Tạo lớp hàng đợi (queue) để giữ hàng các số nguyên. Tạo một kích thước hàng
dài 100 số nguyên. Viết chương trình thực hiện yêu cầu trên.



II/ Hàm tạo & hàm hủy

1/ Khái niệm
Hàm tạo
(constructor) có cùng tên với lớp, là hàm thành phần của một lớp,
không có kiểu trả về.

Mục đích của hàm tạo nhằm tạo ra các khởi đầu cho một đối tượng.
Hàm tạo được gọi tự động mỗi khi đối tượng của lớp đó được tạo ra.

2/ Khai báo

class class_name {
// khai báo các biến và hàm ;
public :
// khai báo các biến và hàm ;
class_name()
; // khai báo hàm tạo
} objects_list ;


Ví dụ 2.1
Lớp myclass có hàm tạo myclass() và hàm show()
#include <iostream.h>

×