SV 类继承的多态性问题(NVDIA2019笔试)
1、原题
class class_a;
virtual function void print_name();
$display("this is class_a");
endfunction
endclass class class_b extends class_a;
virtual function void print_name();
$display("this is class_b");
endfunction
endclass module test;
initial begin
begin:class_test1
class_a a;
class_b b;
a = new();
b = new();
a.print_name();
b.print_name();
end
begin:class_test2
class_a a;
class_b b;
b = new;
a = b;
a.print_name();
b.print_name();
end
begin:class_test3
class_a a;
class_a a2;
class_b b;
class_b b2;
b = new();
a = b;
a2 = new();
b2 = b;
a2.print_name();
$cast(a2,a);
a2.print_name();
b2.print_name();
end
end endmodule

2、执行结果
1)使用a=new会创建一个新对象,并且将句柄a指向这个新创建的对象;使用a=b不会创建新对象,只是将句柄a指向已经存在的对象b
2)原因:基类中display()为虚函数,具体调用哪个x.dispaly()取决于句柄x所指向的对象类型,而不是取决于x这个句柄本身的类型
# this is class_a
# this is class_b
# this is class_b
# this is class_b
# this is class_a
# this is class_b
# this is class_b
3)原因:同2
# this is class_a
# this is class_b
# this is class_b
# this is class_b
# this is class_a
# this is class_b
# this is class_b
4)原因:基类中display()不为虚函数,具体调用哪个x.dispaly()取决于x这个句柄本身的类型
# this is class_a
# this is class_b
# this is class_a
# this is class_b
# this is class_a
# this is class_a
# this is class_b
SV 类继承的多态性问题(NVDIA2019笔试)的更多相关文章
- javaScript的原型继承与多态性
1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...
- C++ 三大特性:封装、继承、多态性
要讲 封装.继承.多态就必须从面向对象说起 开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称为该软件的问题域.面向对象的编程语言将客观事物看作具有属性和行为(或服务)的对象,通过抽象找出同 ...
- Java类的设计----多态性及其应用
多态性及其应用 多态性 多态—在Java中,子类的对象可以替代父类的对象使用一个变量只能有一种确定的数据类型一个引用类型变量可能指向(引用)多种不同类型的对象 Person p = new Stude ...
- java类继承总结一 父类类型与子类类型之间的转化问题(转)
java类继承总结一 父类类型与子类类型之间的转化问题 本文将通过一个实例描述父类类型与子类类型之间的转化问题,这个很特殊的问题常常会导致一些潜在的危险,让你整整一个晚上都在调试程序以解决一个让人抓狂 ...
- C#继承的多态性
C#继承的多态性 当一个类A派生出新类B时,这个基类A在新类B中可以表现为不同的类型:用作它自己的类型.基类型,或者在实现接口时用作接口类型,我们将这种情况称为多态性. C#中的每种类型都是多态性的, ...
- Object与封装、继承和多态性
Object与封装.继承和多态性 在面向对象编程思想中,无论是C++,Java还是C#等,封装.继承与多态性都有着无与伦比的地位,深入理解并掌握它们是必不可少的.而我将使用C#来浅谈继承与多态性. 1 ...
- javascript类继承的一些实验
其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话 ...
- C++ 类继承的对象布局
C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表.成员声明先后顺序排列).该类情况为子类按照继承顺序排列,如c ...
随机推荐
- linux中rz、rs命令无法执行的情况
执行如下安装命令: yum install -y lrzsz
- SDL初始化和创建窗口
//初始化SDL2和创建一个窗口,并且将屏幕绘制成大红色 #include <iostream> extern "C" { #include <SDL.h> ...
- Android Studio MainActivity中的R为红色
csdn解决链接 https://blog.csdn.net/M283592338/article/details/79880413
- HDU 6274 Master of Sequence (暴力+下整除)
题意 两个1e5的数组a,b,定义\(S(t)=\left \lfloor \frac{t-b_i}{a_i} \right \rfloor\),有三个操作 1 x y:将\(a[x]\)变为\(y\ ...
- HDU4195 Regular Convex Polygon (正多边形、外接圆)
题意: 给你正n边形上的三个点,问n最少为多少 思路: 三个点在多边形上,所以三个点的外接圆就是这个正多边形的外接圆,余弦定理求出每个角的弧度值,即该角所对边的圆周角,该边对应的圆心角为圆心角的二倍. ...
- 检测并移除WMI持久化后门
WMI型后门只能由具有管理员权限的用户运行.WMI后门通常使用powershell编写的,可以直接从新的WMI属性中读取和执行后门代码,给代码加密.通过这种方式攻击者会在系统中安装一个持久性的后门 ...
- mapreduce清洗数据
继上篇 MapReduce清洗数据 package mapreduce; import java.io.IOException; import org.apache.hadoop.conf.Confi ...
- Redis Cluster 集群扩容与收缩
http://blog.csdn.net/men_wen/article/details/72896682 Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩 标签: redis集 ...
- AtCoder Beginner Contest 156
https://atcoder.jp/contests/abc156/tasks A - Beginner #include <bits/stdc++.h> #define ll long ...
- thinkPHP问题记录
路由组合变量问题 按照下面的顺序 http://localhost/tp5/public/hello-dfggfqw21321 变量 name 会无法正确传递,但 http://localhost/t ...