Cq lt hdt-th2011-02-tuan04
Upcoming SlideShare
Loading in...5
×
 

Cq lt hdt-th2011-02-tuan04

on

  • 364 views

 

Statistics

Views

Total Views
364
Views on SlideShare
364
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Cq lt hdt-th2011-02-tuan04 Cq lt hdt-th2011-02-tuan04 Document Transcript

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