1. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
HỆ CHÍNH QUI
MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
GVLT: TS. ĐINH BÁ TIẾN
HƯỚNG DẪN THỰC HÀNH
TUẦN 02 – CONSTRUCTOR & DESTRUCTOR
TRẦN THANH HẢI
HỒ TUẤN THANH
TP.HCM, ngày 01 tháng 10 năm 2012
2. tthai/htthanh@fit.hcmus.edu.vn
Trang 2
MỤC LỤC
1 Bài tập...........................................................................................................................3
2 Bài tập trên lớp..............................................................................................................3
3 Bài tập về nhà ...............................................................................................................5
3. tthai/htthanh@fit.hcmus.edu.vn
Trang 3
1 Bài tập
Hoàn thành các bài tập dưới đây, tuân thủ các qui tắc lập trình đã học trong 2 môn năm
nhất:
1. Qui tắc đặt tên
2. Qui tắc viết code
3. Qui tắc ghi chú (ghi chú mỗi project và ghi chú mỗi hàm)
4. Qui tắc chia file (.h và .cpp)
5. Qui tắc bố trí project (1 solution, n projects: Bai01, Bai02, …)
2 Bài tập trên lớp
1. Viết lại lớp phân số, thay các hàm gán, cộng, trừ, nhân, chia bằng các toán tử.
Ngoài ra, cần cung cấp thêm các hàm khởi tạo từ giá trị mặc định, tham số truyền
vào, phân số khác…
2. Viết chương trình chứa các đoạn mã nguồn bên dưới. Kiểm tra chúng có biên dịch
hay thực thi thành công hay không. Giải thích.
// 1.
int& abc()
{
int a = 5;
return a;
}
// 2.
int* bcd()
{
int a = 5;
return &a;
}
// 3.
int* cde()
{
int a = 10;
return a;
}
// 4.
int& def(int &a)
{
return (a = 6);
}
4. tthai/htthanh@fit.hcmus.edu.vn
Trang 4
// 5.
int* efg()
{
return new int(3);
}
3. Viết chương trình chứa các đoạn mã nguồn bên dưới. Kiểm tra chúng có biên dịch
hay thực thi thành công hay không. Giải thích.
// 1.
class Integer {
public:
int val;
Integer(int v) {
val = v;
}
};
int main() {
Integer i(3);
Integer j;
}
// 2.
class Integer {
public:
int val;
Integer(int v) {
val = v; cout << "constructor with arg " << v << endl;
}
};
int main() {
Integer i(3);
Integer j = 5;
}
// 3.
class Integer {
public:
int val;
Integer(int v) {
val = v;
}
};
int main() {
Integer a[] = { Integer(2), Integer(5) };
Integer b[2];
}
4. Viết chương trình chứa các đoạn mã nguồn bên dưới. Kiểm tra chúng có biên dịch
hay thực thi thành công hay không. Giải thích.
// 1.
class Point {
public:
int x, y;
5. tthai/htthanh@fit.hcmus.edu.vn
Trang 5
Point() {
cout << "constructor invoked" << endl;
}
~Point() {
cout << "destructor invoked" << endl;
}
};
int main() {
Point *p = new Point;
delete p;
}
// 2.
class IntegerArray {
public:
int *data;
int size;
IntegerArray(int size) {
data = new int[size];
this->size = size;
}
~IntegerArray() {
delete[] data;
}
};
int main() {
IntegerArray a(2);
a.data[0] = 4; a.data[1] = 2;
if (true) {
IntegerArray b = a;
}
cout << a.data[0] << endl;
}
3 Bài tập về nhà
1. Viết chương trình chứa các đoạn mã nguồn bên dưới. Kiểm tra khi biên dịch hay
thực thi có lỗi gì không. Giải thích.
// 1.
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents=0)
{
m_nCents = nCents;
}
// Copy constructor
Cents(const Cents cSource)
{
m_nCents = cSource.m_nCents;
}
6. tthai/htthanh@fit.hcmus.edu.vn
Trang 6
Cents& operator= (const Cents &cSource);
};
Cents& Cents::operator= (const Cents &cSource)
{
// do the copy
m_nCents = cSource.m_nCents;
// return the existing object
return *this;
}
2. Viết lại các đoạn mã nguồn dưới cho hợp lý.
// 1.
class IntegerArray {
public:
int *data;
int size;
};
int main() {
IntegerArray arr;
arr.size = 2;
arr.data = new int[arr.size];
arr.data[0] = 4; arr.data[1] = 5;
delete[] a.data;
}
// 2.
class IntegerArray {
public:
int *data;
int size;
IntegerArray(int size) {
data = new int[size];
this->size = size;
}
~IntegerArray() {
delete[] data;
}
};
int main() {
IntegerArray a(2);
a.data[0] = 4; a.data[1] = 2;
if (true) {
IntegerArray b = a;
}
cout << a.data[0] << endl;
}