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

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

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 (15.21 KB, 6 trang )

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



32
32

1/ Khái niệm
Hàm tạo có thể có các tham số, chỉ cần bổ sung các tham số thích hợp trong khai báo
lớp và trong đònh nghóa hàm tạo.

Khi khai báo một đối tượng, cần chỉ rõ các tham số này làm đối số.

Ví dụ 3.1
Hàm tạo myclass(int x) có một tham số
#include <iostream.h>

class myclass {
int a;
public:
myclass(
int x
); // constructor
void show();
};
myclass::myclass(int x)
{
cout << "In constructor\n";


a = x;
}

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

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

Giá trò 4 trong khai báo đối tượng ob(4), là đối số được truyền cho tham số x của
hàm tạo myclass(int x), dùng để khởi tạo biến a.
Cách viết khác (dài hơn) myclass ob = myclass (4) ;
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



33
33


Lưu ý hàm hủy không có tham số. Do không có cơ chế nào để truyền đối số cho
một đối tượng bò hủy.


Ví dụ 3.2
Có thể truyền nhiều tham số cho hàm tạo

#include <iostream.h>
class myclass {
int a, b;
public:
myclass(
int x, int y
); // constructor
void show();
};

myclass::myclass(int x, int y)
{
cout << "In constructor\n";
a = x;
b = y;
}

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

int main()

{
myclass ob(
4, 7
);
ob.show();
return 0;
}




Ví dụ 3.3
Dùng hàm tạo được tham số hóa để truyền "tên" cho stack.
Chửụng 2
Lụựp
, ẹ
oỏi tửụùng vaứ tớnh ủoựng goựi



34
34

#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
char who; // identifies stack

public:
stack(
char c
); // constructor
void push(char ch); // push character on stack
char pop(); // pop character from stack
};

// Initialize the stack.
stack::stack(char c)
{
tos = 0;
who = c;
cout << "Constructing stack " << who << "\n";
}

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

// Pop a character.
char stack::pop()
{

if(tos == 0) {
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



35
35
cout << "Stack " << who << " 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(
'A'
), s2(
'B'
);
int i;

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

s2.push('y');
s1.push('c');
s2.push('z');

// This will generate some error messages.
for(i=0; i<5; i++) cout << "Pop s1: " << s1.pop() << "\n";
for(i=0; i<5; i++) cout << "Pop s2: " << s2.pop() << "\n";
return 0;
}


@ Mục đích : dùng để nhận ra tên stack nào được tham chiếu khi có lỗi xảy ra.
Điều này rất có ích trong quá trình gỡ rối (debug).


Ví dụ 3.4
Đối số của hàm tạo là một chuổi.

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
Chửụng 2
Lụựp
, ẹ
oỏi tửụùng vaứ tớnh ủoựng goựi



36

36

class strtype {
char *p;
int len;
public:
strtype(
char *ptr
);
~strtype();
void show();
};

strtype::strtype(char *ptr)
{
len = strlen(ptr);
p = (char *) malloc(len+1);
if(!p) {
cout << "Allocation error\n";
exit(1);
}
strcpy(p, ptr);
}

strtype::~strtype()
{
cout << "Freeing p\n";
free(p);
}


void strtype::show()
{
cout << p << " - length: " << len;
cout << "\n";
}

int main()
{
strtype s1(
"This is a test."
) , s2(
"I like C++."
) ;
s1.show();

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

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