1. Trang chủ
  2. » Công Nghệ Thông Tin

Hướng đối tượng - Lớp và đối tượng

20 449 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lớp và Đối Tượng
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài Tiểu Luận
Thành phố Hồ Chí Minh
Định dạng
Số trang 20
Dung lượng 97 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hướng đối tượng - Lớp và đối tượng

Trang 1

I Cài đặt lớp và tạo thực thể

Dùng từ khóa class

permission_label_1:

permission_label_2:

} object_name;

Trong đó :

class_name: Tên của lớp

object_name là một hoặc nhiều danh biểu xác định đối tượng (object) (thực thể instance).

members: dữ liệu hoặc phát biểu hàm

permission labels: (tùy chọn) có thể là các từ khóa: private:, public:

hoặc protected: Nhằm xác định quyền truy cập các members liên quan

Thiếu dấu ” ;”

này sẽ bị những thông báo lỗi rất khó hiểu!

Trang 2

Thuộc tính truy cập

private: members của class chỉ có thể

truy xuất bởi các members khác thuộc

cùng lớp hoặc từ các lớp " friend "

các members khác thuộc cùng lớp hoặc từ các lớp " friend “, và từ các members của các lớp dẫn xuất

nơi nào thấy được class.

Trang 3

Cài đặt lớp và tạo thực thể

Có sự khác biệt giữa khai báo theo kiểu lập trình hướng thủ tục và hướng đối

tượng.

Sử dụng toán tử phân giải phạm vi (scope

Ví dụ 1 về lập trình kiểu thủ tục

Ví dụ 2 về thiết kế Class và Object (1)

Ví dụ 3 về thiết kế Class và Object (2)

Ví dụ 4 về mảng các đối tượng (arrays of objects)

Trang 4

II.Phương thức thiết lập và phương thức hủy bỏ

(Constructors and Destructors)

Phương thức thiết lập là phương thức sẽ được gọi một

cách tự động khi đối tượng được khởi tạo.

Trong C++ không cho phép khởi tạo dữ liệu trong khi khai báo class vì vậy xây dựng constructor là rất cần thiết Thực chất constructor là một method Init

Khai báo phương thức này bằng cú pháp:

Class class_name {

member;

public:

member;

… ;

class_name(void); // constructor here !

} object_name;

Ví dụ 5

Lưu ý: không định nghĩa giá trị trả về cho method này

Trang 5

Phương thức thiết lập

(Constructors) Chuyển tham số cho constructor

Trong nhiều trường hợp ta cần khởi tạo đối tượng với các tính chất được xác định đặc biệt, khi đó cần chuyển một hoặc

nhiều tham số cho constructor.

Có thể truyền tham số cho constructor

ngay trong khai báo class Ví dụ 5b

Cũng có thể truyền tham số cho

constructor khi khai báo object Ví dụ 5c

Trang 6

Phương thức hủy bỏ

(Destructors)

Phương thức hủy bỏ là phương thức sẽ được gọi một cách tự động khi đối tượng bị hủy

Khai báo phương thức này bằng cú pháp:

Class class_name {

member;

public:

member;

… ;

} object_name;

Ví dụ 6

Coi

chừng

ngã

Trang 7

Phân bổ bộ nhớ động

Nhiều đối tượng cần được tạo ra trong thời gian chạy chương trình và cần bị hủy (giải phóng

khỏi bộ nhớ) khi đã hết nhiệm vụ

Cú pháp cấp phát vùng nhớ:

(datatype) pointer_var = new datatype

Ví dụ:

int *p;

Student *sv_ptr; // Student là một class

Ví dụ 8

Tham khảo thêm về sử dụng bộ nhớ trong C++

Trang 8

Thu hồi bộ nhớ động

Cú pháp thu hồi vùng nhớ:

delete pointer_var

Ví dụ:

int *ptr;

Student *sv_ptr; // Student là một class

ptr = new int; // cấp phát vùng nhớ

*p

*ptr = 1276;

cout << *ptr;

delete ptr; // Thu hồi vùng nhớ *p

sv_ptr = new Student;

… // xử lí *sv_ptr ở đây

delete sv_ptr;

Trang 9

Tham chiếu bộ nhớ động

KHÔNG DÙNG TOÁN TỬ (.) tham chiếu đến các phương thức trong một đối tượng được trỏ: vì toán tử này yêu cầu bên trái

nó là một đối tượng.

PHẢI DÙNG TOÁN TỬ MŨI TÊN (->)

Ví dụ:

Student *Sv_ptr;

Sv_ptr= new Student;

Sv_ptr.hanhdong(); // SAI

Sv_ptr->hanhdong(); //ĐÚNG

Trang 10

III Lớp thừa kế (Inheritance)

Một lớp con có thể thừa kế các thành phần (member)

bao gồm data và method của một lớp cha (base class)

Lớp con có thể thêm các thành phần mới hoặc overwrite các member của siêu lớp.

 Khai báo:

Class class_name: inheritance_type base_class {

private data and function list public:

public data and funtion list } object_list;

Lớp cha (base classs):

class animal

{

public:

void eat(void)

void sleep(void)

void breathe(void)

};

Lớp con (derived class):

{ public:

int tail(void) int fur(void) } jerry ;

Inheritance_type có thể là public, private hoặc

protected

Trang 11

Thuộc tính kế thừa

inheritance_ right có thể là:

– public: Mọi thành phần private của lớp cha là

private ở lớp con Mọi thành phần public của lớp cha là public ở lớp con

– private: Mọi thành phần của lớp cha là private

ở lớp con

– protected:

Trang 12

VI Con trỏ this

Không nhất thiết dùng tên của đối tượng

để truy cập các thành phần của của đối tượng trong một hàm cũng là thành phần của đối tượng đó

Để tham chiếu tường minh đến các thành phần của một đối tượng, các hàm thành phần của cùng đối tượng có thể truy cập đến một con trỏ đặc biệt: this

Cú pháp: this -> member

Ví dụ về sử dụng con trỏ this

Trang 13

VII Hàm và lớp friend

Khai báo hàm bao gồm khai báo kiểu giá trị trả về, tên hàm, số lượng tham số cùng kiểu của các tham số này.

Một khai báo hàm có thể không có giá trị trả về hoặc không có tham số gởi dến

Trong khai báo hàm cũng có thể khởi tạo ngay các giá trị tham số ngầm định.

void func1(void);

int factorial(int n);

char* ChangeCase(char* str; int case);

void func(int num1; int num2=3;char

=‘*’);

Trang 14

Quá tải hàm (Overloading

function)

Quá tải một hàm là làm cho cùng một tên hàm

có thể được gọi với nhiều tham số khác nhau hoặc được chuyển giao với các kiểu dữ liệu

khác nhau

Để quá tải một hàm cần phải khai báo và thiết lập các trường hợp được quá tải

Constructor là một hàm vì vậy cũng có thể quá tải constructor

Trang 15

Hàm và lớp friend

Vì một hàm không thể là thành viên của cùng một lúc hai class nên ta cần một biện pháp sao

cho một hàm có thể truy cập

được các member private của

một class mà nó không phải là

thành viên Một hàm như thế sẽ được gọi là “Friend - bạn” của

class.

Trang 16

Chú ý: Một hàm friend khai báo trong một class không phải là thành viên của class đó, do đó có thể đặt hàm friend chổ nào cũng được trong khai báo class (trong phần private hay trong phần public đều được) và trong friend function không thể dùng con trỏ this

Cú pháp :

class CLASS1; // forward declaration

class CLASS2 {

private:

datatype1 var1;

public:

….

friend datatype FUNC(CLASS1 abc, CLASS2 xyz);

} class CLASS1 {

private:

datatype2 var2;

public:

….

friend datatype FUNC(CLASS1 abc, CLASS2 xyz) }

Ví dụ 10_1

Ví dụ 10_2

Trang 17

Lớp friend

Có thể làm cho mọi hàm thành viên của

một lớp thành friend

Ví dụ:

class beta;

class alpha

{ private: int data;

};

class beta

{ public: void display(alpha d) {cout << d.data;}

void get_data(alpha d) {int x=d.data;}

};

Khai báo này giúp mọi thành viên của lớp beta trở thành friend của alpha

Giờ đây get_data() có thể truy cập dữ liệu của

alpha

Trang 18

VIII Lớp có dữ liệu tĩnh

Một dữ liệu là tĩnh trong khai báo class nếu dữ liệu đó độc lập đối với mọi đối tượng của class Một dữ liệu tĩnh chỉ có một bản sao duy nhất (trong bộ nhớ) dùng chung cho mọi đối tượng thuộc class

Cú pháp: static data_type static_var;

Dữ liệu tĩnh phải được khởi tạo trước khi hàm main() bắt đầu:

data_type class_name :: static_var=value;

Ví dụ 11

Trang 19

IX Lớp có phương thức tĩnh

Tương tự dữ liệu tĩnh, phương thức tĩnh là các hàm toàn cục như các hàm thành viên khác của class

Nó không phải là một phương thức thành viên của bất cứ đối tượng nào của lớp mà là thành viên trực tiếp của lớp

Phương thức tĩnh chỉ có thể gọi được các dữ liệu

tĩnh

Không thể sử dụng từ khóa this trong phương thức tĩnh vì sẽ gây ra sự tham chiếu đến con trỏ đối

tượng

Cú pháp: static data_type static_method ();

Cách gọi: class_name :: static_method()

Ví dụ 12

Trang 20

class và các hàm khách (client

function) của class

Cấu trúc class trong C++ là một kiểu dữ liệu do người dùng định nghĩa Hàm sử

dụng dữ liệu kiểu class gọi là hàm khách của class đó.

C chỉ dùng cách chuyển tham trị (passing

by value) do đó một bản sao của đối

tượng (không phải chính đối tượng) sẽ

được gởi đến cho hàm Vì vậy không thể thay đổi thuộc tính của đối tượng bên

trong hàm khách được.

Ví dụ 13 Ví dụ 14

Ngày đăng: 13/11/2012, 17:00

TỪ KHÓA LIÊN QUAN