Hướng dẫn c++ oop exercises and solutions pdf - c ++ oop bài tập và giải pháp pdf

CSE 428: Giải pháp bài tập về lập trình hướng đối tượng và C ++

SuperScript "[d]" là viết tắt của "khó khăn". Các bài tập tương tự như các bài tập được đánh dấu bằng "[d]" có thể xuất hiện trong các kỳ thi ứng cử, nhưng không phải trong các bài kiểm tra tiêu chuẩn của CSE 428.[d]" stands for "difficult". Exercises similar to those marked with "[d]" might appear in candidacy exams, but not in the standard exams of CSE 428.

  1. Xem xét các khai báo lớp sau trong C ++:
       class C { 
           protected: int x; 
           public: void f[]{...}; 
       }; 
    
       class C1: public C { 
           protected: int x1; 
           public: void h[C *obj]{...}; 
       }; 
    
       class C2: public C1 { 
           public: int x2; 
       }; 
    
       class C3: public C { 
           public: f[]{...}; 
       }; 
    
    1. Vẽ phân cấp lớp
    2. Giả sử rằng chính chứa các tuyên bố sau:
         C1 obj1; 
      
      cho mỗi biểu thức sau đây, hãy nói liệu nó có được phép trong mã chính hay không [chúng có thể bị cấm vì chúng vi phạm định nghĩa lớp hoặc cơ chế bảo vệ]
         obj1.x , obj1.f[] , obj1.x1 , obj1.x2 
      
    3. . Assume that the body of C1::h contains the following declarations
         C2 *obj2;
         C3 *obj3;
      
      For each of the following expressions, say whether it is allowed in the body of C1::h or not
         obj->x , obj2->x , obj3->x 
      
    4. Giả sử rằng phần thân của C1 :: H chứa câu lệnh sau
         obj->f[];
      
      Giả sử rằng chúng ta gọi C1 :: H với một tham số [trỏ đến một đối tượng] của lớp C3. Phương pháp F được thực hiện là gì, c :: f [] hoặc c3 :: f [] là gì? Và điều gì sẽ là phương thức được thực hiện nếu F được khai báo ảo trong C?

    Dung dịch

    1. Phân cấp lớp được biểu thị bằng biểu đồ sau:
            C
           / \
          /   \
         C1   C3
         |
         |
         C2
      
      • OBJ1.x không được phép trong chính, vì X là trường được bảo vệ của C, do đó nó không thể truy cập bên ngoài.
      • obj1.f [] được cho phép, vì f [] là một phương thức công khai được kế thừa bởi C1.
      • OBJ1.x1 không được phép trong chính, vì X1 là trường được bảo vệ.
      • OBJ1.x2 không được phép trong chính, vì x2 không phải là thành viên của C1.
      • OBJ-> X không được phép trong C1 :: H, vì X là trường được bảo vệ của C. Cơ sở lý luận là OBJ có thể được thay thế, tại thời điểm chạy, bởi một đối tượng của một lớp con không ở cùng một nhánh của C1.
      • obj2-> x trong C1 :: H được cho phép. Điều này có thể trông hơi lạ, đặc biệt là trái ngược với câu hỏi trước đó, nhưng là "Hướng dẫn tham khảo C ++ được chú thích" [theo Ellis và Stroustrup] quy định.
      • Ý tưởng là các trường và phương thức được bảo vệ nên được áp dụng [tính bằng C1] cho các đối tượng là Guarranteed thuộc về các lớp trong cùng một nhánh của C1.
    2. OBJ3-> X không được phép trong C1 :: H, vì X là trường được bảo vệ của C, được kế thừa được bảo vệ bởi C3.
  2. Phương pháp được thực thi là c :: f []. Nếu C :: f [] được từ chối ảo, thì phương thức được thực thi sẽ là C3 :: f [].

Dưới đây là kết quả của việc biên dịch và thực thi bằng G ++

// FILE Exercise_1.C

#include < iostream.h >

class C { 
protected: 
   int x; 
public: 
   void f[]{ cout f[] from C1::h: executes C3::f[]
*/

  • Hãy xem xét định nghĩa mẫu sau trong C ++:
       template < class T > class cell { 
           protected: 
               T info; 
           public: 
               void set[T x]{ info = x; } 
               T get[] { return info; } 
       }; 
    
    Xác định lớp con colored_cell bằng cách mở rộng ô lớp với:
    • một màu trường, biểu thị màu của ô, được biểu thị như một ký tự ["W" cho màu trắng, "B" cho màu đen, "r" cho màu đỏ, v.v.],
    • Phương thức set_color, đặt nội dung của màu trường,
    • phương thức get_color, trả về nội dung của màu trường và
    • Một phương thức cập nhật nhận được, trả về nội dung của thông tin trường nếu màu không có màu trắng và trả về 0 nếu không.
    Chọn chữ ký, loại và tham số phù hợp là một phần của bài tập.

    Dung dịch

       template < class T > class colored_cell: public cell< T >{ 
           protected: 
               char color; 
           public: 
               void set_color[char c]{ color = c; } 
               char get_color[] { return color; } 
               T get[] { if [color != 'w'] return info; else return 0; }
       }; 
    
  • Phân cấp lớp được biểu thị bằng biểu đồ sau:
          C
         / \
        /   \
       C1   C3
       |
       |
       C2
    

    Dung dịch

    Phân cấp lớp được biểu thị bằng biểu đồ sau:
          C
         / \
        /   \
       C1   C3
       |
       |
       C2
    
  • OBJ1.x không được phép trong chính, vì X là trường được bảo vệ của C, do đó nó không thể truy cập bên ngoài.

    Dung dịch

    Phân cấp lớp được biểu thị bằng biểu đồ sau:
          C
         / \
        /   \
       C1   C3
       |
       |
       C2
    
  • OBJ1.x không được phép trong chính, vì X là trường được bảo vệ của C, do đó nó không thể truy cập bên ngoài.
    1.    C1 obj1; 
      
      3
    2.    C1 obj1; 
      
      4
    3. obj1.f [] được cho phép, vì f [] là một phương thức công khai được kế thừa bởi C1.

    Dung dịch

    1. Phân cấp lớp được biểu thị bằng biểu đồ sau:
            C
           / \
          /   \
         C1   C3
         |
         |
         C2
      
    2. OBJ1.x không được phép trong chính, vì X là trường được bảo vệ của C, do đó nó không thể truy cập bên ngoài.
    3. obj1.f [] được cho phép, vì f [] là một phương thức công khai được kế thừa bởi C1.
  • Bài Viết Liên Quan

    Chủ Đề