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

Nội tuyến tự động (in-line)

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 (18.76 KB, 8 trang )

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



38
38
Bài tập III


1. Viết chương trình thay đổi lớp stack để cho nó cấp phát bộ nhớ động cho ngăn xếp
chứa các ký tự. Kích thước ngăn xếp được chỉ rõ bằng một tham số với hàm tạo.
Hàm hủy giải phóng bộ nhớ động.

2. Hãy tạo lớp
t_and_d
để truyền ngày và giờ hệ thống hiện hành như một tham số
cho hàm tạo của nó khi được tạo ra. Lớp gồm có hàm thành viên hiển thò ngày giờ
này lên màn hình. Dùng các hàm ngày và giờ chuẩn trong thư viện chuẩn để tìm và
hiện thò ngày.

3. Viết chương trình tạo lớp box có hàm tạo được truyền 3 giá trò double, diễn tả độ
dài các cạnh của hộp. Hãy cho lớp box tính thể tích của hình lập phương và lưu trữ
kết qủa trong biến double. Tạo hàm thành viên vol() để hiển thò thể tích của mỗi đối
tượng box.



IV/ Nội tuyến tự động (in-line)



1/ Khái niệm
Khi đònh nghiã hàm thành phần là đủ ngắn thì có thể đặt đònh nghiã trong khai báo
hàm trong lớp đó. Hàm này sẽ được gọi là
hàm nội tuyến
(in-line func.) và không
cần dùng từ khoá inline đứng trước hàm đó.

Ví dụ 4.1
#include <iostream.h>

class samp {
int i, j;
public:
samp(int a, int b);

// divisible() is defined here and automatically in-lined

int divisible() { return !(i%j) ; }
};
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



39
39
samp::samp(int a, int b)

{
i = a;
j = b;
}

int main()
{
samp ob1(10, 2), ob2(10, 3);

// this is true
if(ob1.divisible()) cout << "10 divisible by 2\n";

// this is false
if(ob2.divisible()) cout << "10 divisible by 3\n";

return 0;
}

Ví dụ 4.2
Dùng hàm nội tuyến để đònh nghiã các hàm tạo và hàm hủy
#include <iostream.h>

class samp {
int i, j;
public:

samp(int a, int b) { i = a; j = b; }
// inline constructor
int divisible() { return !(i%j); }
};



Ví dụ 4.3
Một hàm ngắn ở bên trong một khai báo lớp
cho dù đặc điểm nội tuyến tự động là không có giá trò.

class myclass {
int i;
public:
myclass(int n) { i = n; }
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói



40
40
void show() { cout << i; }
};


Bài tập IV


1. Viết chương trình chuyển đổi lớp stack trong ví dụ 2.3 chương 2, để lớp này sử
dụng các hàm nội tuyến tự động ở những nơi thích hợp.

2. Viết chương trình chuyển đổi lớp strtype trong ví dụ 2.4 chương 2, để lớp này sử

dụng các hàm nội tuyến tự động.


V/ Gán đối tượng

1/ Khái niệm
Một đối tượng được gán cho một đối tượng khác để cả hai đối tượng có cùng kiểu,
khi đó
sự sao chép từng bit của các thành viên dữ liệu được thực hiện
.

Ví dụ 5.1
// An example of object assignment.
#include <iostream.h>

class myclass {
int a, b;
public:
void set(int i, int j) { a = i; b = j; }
void show() { cout << a << ' ' << b << "\n"; }
};

int main()
{
myclass o1, o2;
o1.set(10, 4);

// assign o1 to o2
Chương 2
Lớp

, Đ
ối tượng và tính đóng gói



41
41

o2 = o1
;

o1.show();
o2.show();
return 0;
}

Nếu bổ sung các dòng lệnh sau đây vào trước dòng return 0; , kết quả sẽ ra sao ?
o1.set(3, 2);
o1.show();
o2.show();


2/ Các tính chất
a/ Lệnh gán đối tượng chỉ
áp dụng cho các đối tượng có cùng kiểu
(về mặt vật lý) và
cùng tên kiểu
.

Ví dụ 5.2

// This program has an error.
#include <iostream.h>

class
myclass
{
int a, b;
public:
void set(int i, int j) { a = i; b = j; }
void show() { cout << a << ' ' << b << "\n"; }
};

/* This class is similar to myclass but uses a different class name and thus appears
as
a different type to the compiler */
class
yourclass
{
int a, b;
public:
void set(int i, int j) { a = i; b = j; }
void show() { cout << a << ' ' << b << "\n"; }
};
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói




42
42
int main()
{
myclass o1;
yourclass o2;

o1.set(10, 4);

o2 = o1
; // ERROR, objects not of same type name

o1.show();
o2.show();
return 0;
}

b/ Phép gán đối tượng còn áp dụng cho các dữ liệu phức tạp như mảng, ...

Ví dụ 5.3
#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.
stack::stack()
{
cout << "Constructing a stack\n";
tos = 0;
}

×