1. Kỹ thuật lập trình 501127 – HK2/2011-2012 1
Ỹ UẬ LẬ Ì
ài p 6 – ầ 15
Lớp, thao tác đối tượng và tính kế thừa
ài p bắ b ộ :
Bài 1.
Cho class biểu diễn số phức a + bi như sau:
class Complex{
protected:
float a,b;
public:
...
}
Yêu cầu:
- Tạo constructor khởi trị a = b = 0.
- Tạo hàm set giá trị a, b.
- Viết hàm in ra số phức dạng x+iy
- Hiện thực các operator =; +; -; *; /, ^(luỹ thừa)
- Viết hàm tính magnitude
- Viết các operator ==, !=, <=, >=, <, > dựa trên độ lớn magnitude.
Bài 2.
Hiện thực lớp hình chữ nhật Rectangle theo các miêu tả về thuộc tính dữ liệu và hàm thành viên như sau:
Có hai thuộc tính chiều dài (length) và chiều rộng (width).
Định nghĩa hàm khởi tạo có hai thông số ứng với hai thông tin chiều dài và chiều rộng,
giá trị mặc định cho hai thông số này lần lượt là 20 và 10.
Định nghĩa thủ tục display để hiển thị các thuộc tính ra màn h.nh.
Định nghĩa thủ tục getInfo để yêu cầu người dùng nhập các thông tin cho thuộc tính.
Định nghĩa các thủ rục set để gán giá trị cho các thuộc tính.
Định nghĩa các hàm get để truy xuất giá trị của các thuộc tính.
Định nghĩa hàm area để tính diện tích của h.nh chữ nhật.
Hiện thực lớp hình hộp Box theo miêu tả sau:
Thừa kế lớp Rectangle ở trên.
Có thêm thuộc tính chiều sâu depth.
Định nghĩa đè (override) các thủ tục display, getInfo và hàm area của lớp Rectangle.
Bài 3.
Cho biết giá trị của *p, *q, m và n tương ứng với các dòng lệnh sau khi chương trình thực thi.Kiểm tra lại bằng chương trình.
Ví dụ:
int*p,*q, n;
n = 1; //1
p = &n; //2
2. Kỹ thuật lập trình 501127 – HK2/2011-2012 2
q = new int; //3
*q = 2; //4
deleteq; //5
Trả lời:
Lệnh
p
*p
q
*q
n
1
Không xác định
Không xác định
Không xác định
Không xác định
1
2
xác định
1
Không xác định
Không xác định
1
3
xác định
1
xác định
Không xác định
1
4
xác định
1
xác định
2
1
5
xác định
1
Không xác định
Không xác định
1
a)
int*p, *q, n;
n = 1; //1
q = &n; //2
p = q; //3
*q = *p + 1; //4
p = new int; //5
q = p; //6
*p = n; //7
n = *q + 1; //8
b)
int*p, m, n;
n = 1; //1
m = 2; //2
p = new int; //3
*p = n + 1; //4
p = &n; //5
*p = m + 1; //6
c)
int*p, *q, n, m;
p = new int; //1
*p = 1; //2
q = p; //3
p = &m; //4
m = *q; //5
n = 1; //6
deleteq; //7
m = *q + *p; //8
Bài p làm thêm
Bài 4.Class Array quản lý mảng 2 chiều như sau.
classArray{
protected:
int m,n;
int** a;
3. Kỹ thuật lập trình 501127 – HK2/2011-2012 3
static int nAssignment ;
static int nCopy;
public:
static int getNumberAss(){
returnnAssignment;
}
static int getNumberCopy();
voidoperator=(const Array& arr){
Array::nAssignment ++;
}
...
}
intArray::nAssignment = 0;
...
Yêu cầu:
- Hiện thực constructor, destructor.
- Hiện thực set/get M/N, và set/get 1 phần tử at(int m, int n, int value)
- Hiện thực operator =/copy constructor.
- 2 biến static dùng để lưu lại tổng số lần gọi các tác vụ operator= và copy constructor
- Viết một chương trình sử dụng mảng bằng class Array. Khi kết thúc in ra màn hình số lần các hàm operator và copy constructor được chạy.
Bài 5.
Cho biết giá trị của *p, *q, m và n tương ứng với các dòng lệnh sau khi chương trình thực thi.Kiểm tra lại bằng chương trình.
a)
int*p, m, n;
n = 1; //1
m = 2; //2
p = new int; //3
n = *p; //4
p = &m; //5
n = *p + 1; //6
b)
int*p, m, n;
n = 1; //1
m = 2; //2
p = new int; //3
*p = m + 1; //4
deletep; //5
n = *p + 1; //6
c)
int*p, *q, n;
n = 1; //1
q = &n; //2
p = new int; //3
*p = n + 1; //4
q = p; //5
4. Kỹ thuật lập trình 501127 – HK2/2011-2012 4
n = *q + 1; //6
deleteq; //7
n = *p + 1; //8
d)
int *p, m, n;
n = 3; //1
m = 2; //2
p = &m; //3
*p = n + 1; //4
p = &n; //5
*p = m + 1; //6
e)
int*p, *q, n, m;
n = 1; //1
m = 2; //2
p = &n; //3
q = &m; //4
n++; //5
m--; //6
p = q; //7
q = &n; //8
-- ế -