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

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

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 (20.89 KB, 9 trang )

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>

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



24
24
class myclass {
int a;
public:


myclass()
; // constructor
void show();
};

myclass::
myclass()
// đònh nghiã hàm tạo
{
cout << "In constructor\n";
a = 10;
}

void myclass::show()
{
cout << a;
}

int main()
{
myclass ob; // hàm tạo myclass() được gọi tự động khi đối tượng ob được tạo ra
ob.show();
return 0;
}

Đối với các
đối tượng chung
, một hàm tạo của đối tượng được gọi một lần khi
chương trình bắt đầu thi hành lần đầu.


Đối với các
đối tượng riêng
, hàm tạo của đối tượng được gọi mỗi khi lệnh khai báo
được thi hành.

3/ Khái niệm hàm hủy (destructor)
Hàm hủy
có cùng tên với lớp, có kèm theo dấu
~
đứng trước, 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 hủy nhằm thi hành một số tác động khi đối tượng bò hủy bỏ,
chẳng hạn một đối tượng yêu cầu cấp phát bộ nhớ khi đối tượng được tạo ra và giải
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



25
25
phóng bộ nhớ khi đối tượng bò hủy bỏ.

Hàm hủy được gọi tự động mỗi khi đối tượng của lớp đó bò hủy bỏ.

4/ 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
~class_name()
; // khai báo hàm hủy
} objects_list ;


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

class myclass {
int a;
public:
myclass(); // constructor

~myclass()
; // destructor
void show();
};

myclass::myclass()
{
cout << "In constructor\n";
a = 10;
}

myclass::

~myclass()

{
cout << "Destructing...\n";
}


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



26
26
void myclass::show()
{
cout << a << "\n";
}

int main()
{
myclass ob;
ob.show();
return 0;
}


Đối với các

đối tượng chung
, hàm hủy của đối tượng được gọi khi chương trình kết
thúc.

Đối với các
đối tượng riêng
, hàm hủy của đối tượng được gọi khi chúng ra khỏi phạm
vi.


Lưu ý
: Không thể biết được đòa chỉ của hàm tạo hoặc hàm hủy.

Ví dụ 2.3
Dùng hàm tạo stack() để tự động khởi đầu ngăn xếp khi đối tượng được
tạo

#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:
stack(); // constructor
void push(char ch); // push character on stack
char pop(); // pop character from stack
};

// Initialize the stack.

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



27
27
stack::stack()
{
cout << "Constructing a stack\n";
tos = 0;
}

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

// Pop a character.
char stack::pop()
{
if(tos==0) {

cout << "Stack is empty\n";
return 0; // return null on empty stack
}
tos--;
return stck[tos];
}

int main()
{
// Create two stacks that are automatically initialized.
stack s1, s2;
int i;

s1.push('a');
s2.push('x');
s1.push('b');

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×