Vừa

Đa hình: hàm virtual qua handle lớp cha

Class cần viết: shape · cần máy chấm có SystemVerilog · 6 case (2 mẫu) · giới hạn 4 s/case · ~20 phút

classinheritancevirtualpolymorphisminterview

Đa hình là nền tảng của UVM: sequencer giữ handle kiểu uvm_sequence_item, factory trả về handle lớp cha, còn driver gọi phương thức mà không cần biết lớp con cụ thể. Mọi thứ đều dựa vào phương thức virtual.

Viết các class sau (có thể đặt trong cùng một file):

Class Yêu cầu
shape virtual function real area() trả 0.0; virtual function string name() trả "shape"; static function real total_area(shape s[$]) trả tổng area() của mọi phần tử
rect extends shape function new(real w, real h); area() = w*h; name() = "rect"
circle extends shape function new(real r); area() = 3.14159 * r * r; name() = "circle"
square extends rect function new(real a) (hình vuông cạnh a, dùng lại rect); name() = "square"

Testbench chỉ dùng handle kiểu shape:

shape s;
rect r = new(3, 4);
s = r;
s.area();   // phải ra 12.0, không phải 0.0
s.name();   // "rect"

Kết quả real được so với sai số 1e-6. Chỉ viết class.

Đề này cần máy chấm có engine SystemVerilog.

Các case

  1. rect 3×4 và circle r=1 qua handle shapemẫu
  2. name() của từng lớp qua handle shapemẫu

Cùng 4 case ẩn kiểm các yêu cầu còn lại của đề. Case ẩn chỉ báo đúng/sai, không nói chi tiết: tự tìm chỗ sai từ đề, hoặc mở gợi ý.

Testbench có mô hình tham chiếu riêng, độc lập với lời giải mẫu. Lời giải mẫu đã chạy qua mọi case trên simulator thật, và 3 bản lỗi mẫu đều bị ít nhất một case bắt. Case mẫu sai sẽ cho biết chỗ sai đầu tiên (giá trị mong đợi so với giá trị nhận được); case ẩn chỉ báo đúng/sai.

Đang kết nối máy chấm…
Đang nạp bản nháp…

Tab để thụt lề. Nhấn Esc rồi Tab để rời trình soạn. Bản nháp tự lưu trong trình duyệt.

Gợi ý

Mỗi gợi ý mở trước khi AC giảm 10% điểm của đề.

Lời giải và phân tích

Lịch sử nộp bài

Chưa có lượt nào.

Độ khó: Vừa. Điểm gốc 40.