Lớp đối tượng và tính đóng gói - Nội tuyến tự động (in-line) - Pdf 63

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)

{
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); }
};

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

// 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

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;
}

Chửụng 2
Lụựp
, ẹ
oỏi tửụùng vaứ tớnh ủoựng goựi
43
43
// Push a character.
void stack::push(char ch)
{
if(tos==SIZE) {
cout << "Stack is full\n";
return;
}
stck[tos] = ch;
tos++;
}

Lớp
, Đ
ối tượng và tính đóng gói
44
44
return 0;
} c/ Đối với các
đối tượng có sử dụng chuổi
, khi thực hiện phép gán đối tượng phải
chắc chắn rằng không hủy bỏ các thông tin cần thiết trong đối tượng đó.

Ví dụ 5.4
// This program contains an error.

#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>

class strtype {
char *p;
int len;
public:
strtype(char *ptr);

{
cout << p << " - length: " << len;
cout << "\n";
}

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

s1.show();
s2.show();

// assign s1 to s2 - - this generates an error

s2 = s1;

s1.show();
s2.show();
return 0;
}
Nguyên nhân nào gây ra lỗi ?

Bài tập V 1. Tìm lỗi sai trong đoạn chương trình sau
#include <iostream>
class cl1 {
int i, j;
public:


3. Nếu lớp queue trong câu 2. cấp phát bộ nhớ động để giữ hàng đợi, tại sao trong
trường hợp này, một hàng đợi không thể được gán cho hàng đợi khác. VI/ Truyền các đối tượng sang hàm

1/ Việc truyền các đối tượng cho hàm giống như truyền các đối số thông thường.
Tham số của hàm có kiểu dữ liệu là kiểu lớp, và
đối số truyền cho hàm chính là đối
tượng
.

Giống như các kiểu dữ liệu khác, theo ngầm đònh, tất cả các đối tượng được truyền
bởi giá trò cho một hàm.

Ví dụ 6.1
Truyền một đối tượng cho hàm.
#include <iostream.h>

class samp {
int i;
public:
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói

những thay đổi cho đối tượng bên trong hàm không có ảnh hưởng đến sự gọi đối
tượng.

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

class samp {
int i;
public:
samp(int n) { i = n; }
void set_i(int n) { i = n; }
int get_i() { return i; }
};

// Set o.i to its square. This has no effect on the object used to call sqr_it(),
Chương 2
Lớp
, Đ
ối tượng và tính đóng gói
48
48
however.
void sqr_it(
samp o
)
{
o.set_i( o.get_i() * o.get_i() ) ;

};

/* Set o.i to its square. This affects the calling argument. */
void sqr_it(
samp *o
)
{


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status