2015-11-15 2 views
0

Выход кода ниже was-systemverilog- полиморфизм

Это класс А

Это класс А

Но по мне выход должен быть-

Это класс A

Это расширенный класс A

Потому что , после печати первой строки мы присваиваем объект типа EA объекту типа A-

EA my_a = my_ea;

а затем, когда мы делаем- my_a.disp();

он должен напечатать-это класс А Расширенная

Сообщать ли я правильно или нет?

class A ; //class A 
task disp(); 
$display(" This is class A "); 
endtask 
endclass 

class EA extends A ; //subclass EA 
task disp(); 
$display(" This is Extended class A "); 
endtask 
endclass 

program main ; 
EA my_ea; 
A my_a; 

initial 
begin 
my_a = new(); 
my_a.disp(); 

my_ea = new(); 
my_a = my_ea; 
my_a.disp(); 
end 
endprogram 
+0

почему Java тег здесь? –

ответ

3

Вы должны объявить задачу как виртуальный:

class A ; //class A 
    virtual task disp(); 
    $display(" This is class A "); 
    endtask 
endclass 
+0

Хорошо. Но почему это не печатает? Это расширенный класс A, теперь? Поскольку я назначаю объект типа EA объекту типа A. – Akash

+0

Я печатаю «Это расширенный класс А», когда он реализован здесь: http://www.edaplayground.com/x/WcN – Hida

Смежные вопросы