SlideShare a Scribd company logo
1 of 11
Download to read offline
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: ThS. ĐẶNG BÌNH PHƯƠNG
HƯỚNG DẪN THỰC HÀNH
TUẦN 04 – ATTRIBUTE & METHOD
TRẦN THANH HẢI
ĐẶNG ĐĂNG KHOA
HỒ TUẤN THANH
TP.HCM, ngày 15 tháng 10 năm 2012
tthai/ddkhoa/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à ...............................................................................................................9
tthai/ddkhoa/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 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 i = 12;
const int ci = 12;
int *ip1 = &12;
12 = 13;
const int *ip2 = &ci;
ci = 13;
const int *ip3 = &i;
i = 10;
*ip3 = 10;
// 2.
const char *pci;
char * const cpi = 0;
char const *pci2;
const char * const cpci = 0;
char *ip;
int i = strlen( cpi );
pci = ip;
ip = pci;
// 3.
char **ppc;
const char **ppcc = ppc;
// 4.
int * * * const cnnn = 0;
int * * const * ncnn = 0;
int * const * * nncn = 0;
int * const * const * nccn = 0;
const int * * * nnnc = 0;
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 4
ncnn = cnnn;
nncn = cnnn;
nccn = cnnn;
ncnn = cnnn;
nnnc = cnnn;
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. Nếu chương trình không có lỗi, tiến
hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra.
// 1.
class A {
public:
protected:
int i;
};
class B : public A {
friend void f(A*, B*);
void g(A*);
};
void f(A* pa, B* pb) {
pa->i = 1;
pb->i = 2;
int A::* point_i = &A::i;
int A::* point_i2 = &B::i;
}
void B::g(A* pa) {
pa->i = 1;
i = 2;
int A::* point_i = &A::i;
int A::* point_i2 = &B::i;
}
void h(A* pa, B* pb) {
pa->i = 1;
pb->i = 2;
}
int main() { }
// 2.
struct A {
void f() { }
};
struct B : A {
void f(int) { }
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 5
};
int main() {
B obj_B;
obj_B.f(3);
obj_B.f();
}
// 3.
struct A {
void f() { }
};
struct B : A {
using A::f;
void f(int) { }
};
int main() {
B obj_B;
obj_B.f(3);
obj_B.f();
}
// 4.
#include <iostream>
using namespace std;
struct A {
void f() { }
void f(int) { cout << "void A::f(int)" << endl; }
};
struct B : A {
using A::f;
void f(int) { cout << "void B::f(int)" << endl; }
};
int main() {
B obj_B;
obj_B.f(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. Nếu chương trình không có lỗi, tiến
hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra.
// 1.
#include <iostream>
using namespace std;
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 6
class B1 {
int b;
public:
B1() { cout << "B1::B1()" << endl; };
// inline constructor
B1(int i) : b(i) { cout << "B1::B1(int)" << endl; }
};
class B2 {
int b;
protected:
B2() { cout << "B2::B2()" << endl; }
// noninline constructor
B2(int i);
};
// B2 constructor definition including initialization list
B2::B2(int i) : b(i) { cout << "B2::B2(int)" << endl; }
class D : public B1, public B2 {
int d1, d2;
public:
D(int i, int j) : B1(i+1), B2(), d1(i) {
cout << "D1::D1(int, int)" << endl;
d2 = j;}
};
int main() {
D obj(1, 2);
}
// 2. Sử dụng tiếp tục mã nguồn ở 1.
class D : public B1, public B2 {
int d1, d2;
public:
// call B2() generated by compiler
D(int i, int j) : B1(i+1), d1(i) {
cout << "D1::D1(int, int)" << endl;
d2 = j;}
};
// 3. Sử dụng tiếp tục mã nguồn ở 2.
class B {
B() { }
};
class D : public B {
// error: implicit call to private B() not allowed
D() { }
};
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 7
// 4.
class A {
public:
A(int) { }
};
class B : public A {
static const int i;
const int j;
int &k;
public:
B(int& arg) : A(0), j(1), k(arg) { }
};
int main() {
int x = 0;
B obj(x);
};
// 5.
#include <iostream>
using namespace std;
struct A {
int i;
A(int arg) : i(arg) {
cout << "Value of i: " << i << endl;
}
};
struct B : A {
int j;
int f() { return i; }
B();
};
B::B() : A(f()), j(1234) {
cout << "Value of j: " << j << endl;
}
int main() {
B obj;
}
// 6.
#include <iostream>
using namespace std;
struct A {
int i;
A(int arg) : i(arg) {
cout << "Value of i: " << i << endl;
}
};
struct B : A {
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 8
int j;
int f() { return i; }
B();
};
B::B() : A(5678), j(f()) {
cout << "Value of j: " << j << endl;
}
int main() {
B obj;
}
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. Nếu chương trình không có lỗi, tiến
hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra.
// 1.
#include <iostream>
using namespace std;
struct V {
V() { cout << "V()" << endl; }
};
struct V2 {
V2() { cout << "V2()" << endl; }
};
struct A {
A() { cout << "A()" << endl; }
};
struct B : virtual V {
B() { cout << "B()" << endl; }
};
struct C : B, virtual V2 {
C() { cout << "C()" << endl; }
};
struct D : C, virtual V {
A obj_A;
D() { cout << "D()" << endl; }
};
int main() {
D c;
}
// 2.
#include <string>
class Y {
private:
char * string;
int number;
public:
// Constructor
Y(const char*, int);
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 9
// Destructor
~Y() { delete[] string; }
};
// Define class Y constructor
Y::Y(const char* n, int a) {
string = strcpy(new char[strlen(n) + 1 ], n);
number = a;
}
int main () {
// Create and initialize
// object of class Y
Y yobj = Y("somestring", 10);
// ...
// Destructor ~Y is called before
// control returns from main()
}
// 3.
#include <new>
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A::A()" << endl; }
~A() { cout << "A::~A()" << endl; }
};
int main () {
char* p = new char[sizeof(A)];
A* ap = new (p) A;
ap->A::~A();
delete [] p;
}
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 chúng có biên dịch
hay thực thi thành công hay không. Giải thích. Nếu chương trình không có lỗi, tiến
hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra.
// 1.
#include <iostream>
using namespace std;
class A
{
public:
A(int nValue)
{
cout << "A: " << nValue << endl;
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 10
}
};
class B: public A
{
public:
B(int nValue, double dValue)
: A(nValue)
{
cout << "B: " << dValue << endl;
}
};
class C: public B
{
public:
C(int nValue, double dValue, char chValue)
: B(nValue, dValue)
{
cout << "C: " << chValue << endl;
}
};
int main()
{
C cClass(5, 4.3, 'R');
return 0;
}
// 2.
#include <iostream>
using namespace std;
struct E {
const char* message;
E() : message("Class E") { }
};
struct E1 : E {
const char* message;
E1() : message("Class E1") { }
};
struct E2 : E {
const char* message;
E2() : message("Class E2") { }
};
void f() {
try {
cout << "In try block of f()" << endl;
cout << "Throwing exception of type E1" << endl;
E1 myException;
throw myException;
}
tthai/ddkhoa/htthanh@fit.hcmus.edu.vn
Trang 11
catch (E2& e) {
cout << "In handler of f(), catch (E2& e)" << endl;
cout << "Exception: " << e.message << endl;
throw;
}
catch (E1& e) {
cout << "In handler of f(), catch (E1& e)" << endl;
cout << "Exception: " << e.message << endl;
throw;
}
catch (E& e) {
cout << "In handler of f(), catch (E& e)" << endl;
cout << "Exception: " << e.message << endl;
throw;
}
}
int main() {
try {
cout << "In try block of main()" << endl;
f();
}
catch (E2& e) {
cout << "In handler of main(), catch (E2& e)" << endl;
cout << "Exception: " << e.message << endl;
}
catch (...) {
cout << "In handler of main(), catch (...)" << endl;
}
}

More Related Content

What's hot

Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
Congdat Le
 
Bài 17 tin học 11
Bài 17 tin học 11Bài 17 tin học 11
Bài 17 tin học 11
HaBaoChau
 
Bài 17 Chương trình con và phân loại
Bài 17 Chương trình con và phân loạiBài 17 Chương trình con và phân loại
Bài 17 Chương trình con và phân loại
Hòa Hoàng
 
Bài 18 tin hoc 11
Bài 18 tin hoc 11Bài 18 tin hoc 11
Bài 18 tin hoc 11
HaBaoChau
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
bookbooming1
 

What's hot (17)

Tin11
Tin11Tin11
Tin11
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 
Các cấu trúc lệnh trong C
Các cấu trúc lệnh trong CCác cấu trúc lệnh trong C
Các cấu trúc lệnh trong C
 
Bai 8
Bai 8Bai 8
Bai 8
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
 
Bài 17 tin học 11
Bài 17 tin học 11Bài 17 tin học 11
Bài 17 tin học 11
 
Chuong trinh con
Chuong trinh conChuong trinh con
Chuong trinh con
 
Bài 17 Chương trình con và phân loại
Bài 17 Chương trình con và phân loạiBài 17 Chương trình con và phân loại
Bài 17 Chương trình con và phân loại
 
Bai 18
Bai 18Bai 18
Bai 18
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiển
 
Bài 18 tin hoc 11
Bài 18 tin hoc 11Bài 18 tin hoc 11
Bài 18 tin hoc 11
 
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
Bài 18. Ví dụ về cách viết và sử dụng chương trình con.
 
Sổ tay thư viện hàm ngôn ngữ C
Sổ tay thư viện hàm ngôn ngữ CSổ tay thư viện hàm ngôn ngữ C
Sổ tay thư viện hàm ngôn ngữ C
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Ky thuat lap trinh c++
Ky thuat lap trinh c++Ky thuat lap trinh c++
Ky thuat lap trinh c++
 
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]Bài giảng ngôn ngữ lập trình c c++   phạm hồng thái[bookbooming.com]
Bài giảng ngôn ngữ lập trình c c++ phạm hồng thái[bookbooming.com]
 

Viewers also liked

Cautrucdulieu full
Cautrucdulieu fullCautrucdulieu full
Cautrucdulieu full
. .
 
Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09
. .
 
Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11
. .
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
. .
 
Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01
. .
 
Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08
. .
 
Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10
. .
 
Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05
. .
 
Exceptions ref
Exceptions refExceptions ref
Exceptions ref
. .
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
. .
 

Viewers also liked (10)

Cautrucdulieu full
Cautrucdulieu fullCautrucdulieu full
Cautrucdulieu full
 
Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09
 
Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
 
Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01
 
Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08
 
Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10
 
Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05
 
Exceptions ref
Exceptions refExceptions ref
Exceptions ref
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 

Similar to Cq lt hdt-th2011-02-tuan04 (20)

Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
Cq lt hdt-th2011-01-tuan02
Cq lt hdt-th2011-01-tuan02Cq lt hdt-th2011-01-tuan02
Cq lt hdt-th2011-01-tuan02
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Lab lap trinhmang_v3
Lab lap trinhmang_v3Lab lap trinhmang_v3
Lab lap trinhmang_v3
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
Nhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá ThịnhNhập môn lập trình - Vương Bá Thịnh
Nhập môn lập trình - Vương Bá Thịnh
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C2 basics of_c_and_cpp
C2 basics of_c_and_cppC2 basics of_c_and_cpp
C2 basics of_c_and_cpp
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Chuong 1@ngon ngu c
Chuong 1@ngon ngu cChuong 1@ngon ngu c
Chuong 1@ngon ngu c
 
Bai19 chuong trinh con (thu tuc va ham) - tin 11
Bai19  chuong trinh con (thu tuc va ham) - tin 11Bai19  chuong trinh con (thu tuc va ham) - tin 11
Bai19 chuong trinh con (thu tuc va ham) - tin 11
 
Unit Test
Unit TestUnit Test
Unit Test
 
005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf
 
005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf005. LAP TRINH C#.pdf
005. LAP TRINH C#.pdf
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 
Nhat nghe c#
Nhat nghe   c#Nhat nghe   c#
Nhat nghe c#
 

More from . .

Cq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thckCq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thck
. .
 
Baitaprdbms
BaitaprdbmsBaitaprdbms
Baitaprdbms
. .
 
Core java 9
Core java 9Core java 9
Core java 9
. .
 
Core java 8
Core java 8Core java 8
Core java 8
. .
 
Core java 7
Core java 7Core java 7
Core java 7
. .
 
Core java 6
Core java 6Core java 6
Core java 6
. .
 
Core java 5
Core java 5Core java 5
Core java 5
. .
 
Core java 4
Core java 4Core java 4
Core java 4
. .
 
Core java 3
Core java 3Core java 3
Core java 3
. .
 
Core java 2
Core java 2Core java 2
Core java 2
. .
 
Core java 1
Core java 1Core java 1
Core java 1
. .
 
Core java 10
Core java 10Core java 10
Core java 10
. .
 
ToanRoirac
ToanRoiracToanRoirac
ToanRoirac
. .
 

More from . . (13)

Cq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thckCq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thck
 
Baitaprdbms
BaitaprdbmsBaitaprdbms
Baitaprdbms
 
Core java 9
Core java 9Core java 9
Core java 9
 
Core java 8
Core java 8Core java 8
Core java 8
 
Core java 7
Core java 7Core java 7
Core java 7
 
Core java 6
Core java 6Core java 6
Core java 6
 
Core java 5
Core java 5Core java 5
Core java 5
 
Core java 4
Core java 4Core java 4
Core java 4
 
Core java 3
Core java 3Core java 3
Core java 3
 
Core java 2
Core java 2Core java 2
Core java 2
 
Core java 1
Core java 1Core java 1
Core java 1
 
Core java 10
Core java 10Core java 10
Core java 10
 
ToanRoirac
ToanRoiracToanRoirac
ToanRoirac
 

Cq lt hdt-th2011-02-tuan04

  • 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: ThS. ĐẶNG BÌNH PHƯƠNG HƯỚNG DẪN THỰC HÀNH TUẦN 04 – ATTRIBUTE & METHOD TRẦN THANH HẢI ĐẶNG ĐĂNG KHOA HỒ TUẤN THANH TP.HCM, ngày 15 tháng 10 năm 2012
  • 2. tthai/ddkhoa/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à ...............................................................................................................9
  • 3. tthai/ddkhoa/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 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 i = 12; const int ci = 12; int *ip1 = &12; 12 = 13; const int *ip2 = &ci; ci = 13; const int *ip3 = &i; i = 10; *ip3 = 10; // 2. const char *pci; char * const cpi = 0; char const *pci2; const char * const cpci = 0; char *ip; int i = strlen( cpi ); pci = ip; ip = pci; // 3. char **ppc; const char **ppcc = ppc; // 4. int * * * const cnnn = 0; int * * const * ncnn = 0; int * const * * nncn = 0; int * const * const * nccn = 0; const int * * * nnnc = 0;
  • 4. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 4 ncnn = cnnn; nncn = cnnn; nccn = cnnn; ncnn = cnnn; nnnc = cnnn; 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. Nếu chương trình không có lỗi, tiến hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra. // 1. class A { public: protected: int i; }; class B : public A { friend void f(A*, B*); void g(A*); }; void f(A* pa, B* pb) { pa->i = 1; pb->i = 2; int A::* point_i = &A::i; int A::* point_i2 = &B::i; } void B::g(A* pa) { pa->i = 1; i = 2; int A::* point_i = &A::i; int A::* point_i2 = &B::i; } void h(A* pa, B* pb) { pa->i = 1; pb->i = 2; } int main() { } // 2. struct A { void f() { } }; struct B : A { void f(int) { }
  • 5. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 5 }; int main() { B obj_B; obj_B.f(3); obj_B.f(); } // 3. struct A { void f() { } }; struct B : A { using A::f; void f(int) { } }; int main() { B obj_B; obj_B.f(3); obj_B.f(); } // 4. #include <iostream> using namespace std; struct A { void f() { } void f(int) { cout << "void A::f(int)" << endl; } }; struct B : A { using A::f; void f(int) { cout << "void B::f(int)" << endl; } }; int main() { B obj_B; obj_B.f(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. Nếu chương trình không có lỗi, tiến hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra. // 1. #include <iostream> using namespace std;
  • 6. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 6 class B1 { int b; public: B1() { cout << "B1::B1()" << endl; }; // inline constructor B1(int i) : b(i) { cout << "B1::B1(int)" << endl; } }; class B2 { int b; protected: B2() { cout << "B2::B2()" << endl; } // noninline constructor B2(int i); }; // B2 constructor definition including initialization list B2::B2(int i) : b(i) { cout << "B2::B2(int)" << endl; } class D : public B1, public B2 { int d1, d2; public: D(int i, int j) : B1(i+1), B2(), d1(i) { cout << "D1::D1(int, int)" << endl; d2 = j;} }; int main() { D obj(1, 2); } // 2. Sử dụng tiếp tục mã nguồn ở 1. class D : public B1, public B2 { int d1, d2; public: // call B2() generated by compiler D(int i, int j) : B1(i+1), d1(i) { cout << "D1::D1(int, int)" << endl; d2 = j;} }; // 3. Sử dụng tiếp tục mã nguồn ở 2. class B { B() { } }; class D : public B { // error: implicit call to private B() not allowed D() { } };
  • 7. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 7 // 4. class A { public: A(int) { } }; class B : public A { static const int i; const int j; int &k; public: B(int& arg) : A(0), j(1), k(arg) { } }; int main() { int x = 0; B obj(x); }; // 5. #include <iostream> using namespace std; struct A { int i; A(int arg) : i(arg) { cout << "Value of i: " << i << endl; } }; struct B : A { int j; int f() { return i; } B(); }; B::B() : A(f()), j(1234) { cout << "Value of j: " << j << endl; } int main() { B obj; } // 6. #include <iostream> using namespace std; struct A { int i; A(int arg) : i(arg) { cout << "Value of i: " << i << endl; } }; struct B : A {
  • 8. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 8 int j; int f() { return i; } B(); }; B::B() : A(5678), j(f()) { cout << "Value of j: " << j << endl; } int main() { B obj; } 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. Nếu chương trình không có lỗi, tiến hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra. // 1. #include <iostream> using namespace std; struct V { V() { cout << "V()" << endl; } }; struct V2 { V2() { cout << "V2()" << endl; } }; struct A { A() { cout << "A()" << endl; } }; struct B : virtual V { B() { cout << "B()" << endl; } }; struct C : B, virtual V2 { C() { cout << "C()" << endl; } }; struct D : C, virtual V { A obj_A; D() { cout << "D()" << endl; } }; int main() { D c; } // 2. #include <string> class Y { private: char * string; int number; public: // Constructor Y(const char*, int);
  • 9. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 9 // Destructor ~Y() { delete[] string; } }; // Define class Y constructor Y::Y(const char* n, int a) { string = strcpy(new char[strlen(n) + 1 ], n); number = a; } int main () { // Create and initialize // object of class Y Y yobj = Y("somestring", 10); // ... // Destructor ~Y is called before // control returns from main() } // 3. #include <new> #include <iostream> using namespace std; class A { public: A() { cout << "A::A()" << endl; } ~A() { cout << "A::~A()" << endl; } }; int main () { char* p = new char[sizeof(A)]; A* ap = new (p) A; ap->A::~A(); delete [] p; } 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 chúng có biên dịch hay thực thi thành công hay không. Giải thích. Nếu chương trình không có lỗi, tiến hành chạy từng bước để hiểu rõ thứ tự chạy của các lệnh và kết quả xuất ra. // 1. #include <iostream> using namespace std; class A { public: A(int nValue) { cout << "A: " << nValue << endl;
  • 10. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 10 } }; class B: public A { public: B(int nValue, double dValue) : A(nValue) { cout << "B: " << dValue << endl; } }; class C: public B { public: C(int nValue, double dValue, char chValue) : B(nValue, dValue) { cout << "C: " << chValue << endl; } }; int main() { C cClass(5, 4.3, 'R'); return 0; } // 2. #include <iostream> using namespace std; struct E { const char* message; E() : message("Class E") { } }; struct E1 : E { const char* message; E1() : message("Class E1") { } }; struct E2 : E { const char* message; E2() : message("Class E2") { } }; void f() { try { cout << "In try block of f()" << endl; cout << "Throwing exception of type E1" << endl; E1 myException; throw myException; }
  • 11. tthai/ddkhoa/htthanh@fit.hcmus.edu.vn Trang 11 catch (E2& e) { cout << "In handler of f(), catch (E2& e)" << endl; cout << "Exception: " << e.message << endl; throw; } catch (E1& e) { cout << "In handler of f(), catch (E1& e)" << endl; cout << "Exception: " << e.message << endl; throw; } catch (E& e) { cout << "In handler of f(), catch (E& e)" << endl; cout << "Exception: " << e.message << endl; throw; } } int main() { try { cout << "In try block of main()" << endl; f(); } catch (E2& e) { cout << "In handler of main(), catch (E2& e)" << endl; cout << "Exception: " << e.message << endl; } catch (...) { cout << "In handler of main(), catch (...)" << endl; } }