问题标签 [upcasting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java中的向上转换是否隐藏了子类方法和字段?
在我正在编写的程序中,我有一个类RestrictedUser
和一个User
派生RestrictedUser.
自我试图通过强制转换来隐藏用户特定方法的类,RestrictedUser
但是当我进行强制转换时,用户方法仍然可用。此外,当我运行调试器时,变量的类型显示为User
.
在 Java 中进行强制转换是否隐藏了子类方法和字段,还是我做错了什么?有解决方法吗?
谢谢
c# - 垂头丧气
我是C#(和OOP)的新手。当我有如下代码时:
问题 1:如果我有其他代码可以做到这一点:
这Employee
是 a Manager
,但是当我像这样将它转换为 anEmployee
时,这意味着我正在向上转换它吗?
问题 2:
当我有几个Employee
类对象并且其中一些但不是全部是Manager
's 时,我怎样才能在可能的情况下向下转换它们?
c++ - 向上转换指针引用
我有以下人为的示例(来自真实代码):
当我尝试编译它时,我得到:
1) 显然 gcc 被构造函数弄糊涂了。如果我从构造函数中删除引用,那么代码就会编译。所以我的假设是向上转换指针引用出了点问题。有人能告诉我这里发生了什么吗?
2)一个稍微不相关的问题。如果我要在构造函数中做一些可怕的事情,比如“删除其他”(请耐心等待),当有人向我传递一个指向堆栈上某物的指针时会发生什么?
如何确保该指针合法地指向堆上的某些东西?
c++ - 如果不在纯虚拟基类中创建显式函数,就不能完成复制构造吗?
我的目标是做一个类的深拷贝,但是一个虚拟类却造成了麻烦。
编译错误信息:
我计划拥有更多从 Vir 继承的 Handler 类(如 Handler1、Handler2 等),并将拥有自己独特的成员(如 float a; 或 double b; 等)。因此,将所有 Handler 类的所有 getter 和 setter 函数保留在 Vir 类中对我来说是没有意义的。我想在 Handler 类中保留我的 getter 和 setter 方法,因为这些成员对于 Handler 类是唯一的。编译器不允许我这样做。帮助?
c# - 如何覆盖虚拟方法,但仍调用 C# 中的基类版本
我有一个简单的类层次结构,其中有一个被覆盖的虚拟方法。但是在某些调用点我想调用这个方法的基类版本而不是虚拟方法。
例如:
java - 制作对象时向上转型
假设您有一个Shape
基类和各种派生类型:Circle
等。
在制作新对象时,是否有任何理由在此处向上转换,通过编写以下代码:
而不是这个:
这两个陈述中的每一个所产生的s
对象是否彼此不同?
c++ - 如何在 CRTP 中实现向下转换是否有效的编译时检查?
我有一个普通的旧 CRPT(请不要被访问限制分心 - 问题不在于它们):
像往常一样打算这样使用:
现在这static_cast
让我很困扰。我需要一个向下转换(不是向上转换),所以我必须使用显式转换。在所有合理的情况下,转换都是有效的,因为当前对象确实属于派生类。
但是,如果我以某种方式改变了层次结构并且演员现在变得无效怎么办?
在这种情况下,我可以以某种方式强制执行显式向下转换是否有效的编译时检查吗?
java - 使用 null 调用函数时自动向上转换
此代码打印出来MyUrgentException
。有人可以解释为什么吗?
java - Java中向上转换的问题?
有人可以解释为什么会这样:
但是产生的输出是:
为什么该.setType()
方法执行子类方法,而不是超类方法,即使我正在向上转换,可以看出?
c++ - C++ 多态类、虚函数和性能转换
我有以下课程:
还有其他类都继承自 State。他们的区别仅在于他们如何评估 isTerm() 这取决于行为。我宁愿不使用虚函数 bur 覆盖函数 isTerm,如果不是因为有一些其他模板类旨在与各种状态派生类一起使用。其中之一是政策:
updateOptimal 必须获得一个 State 派生类(取决于行为),从 State *ptr 向上转换为当前使用的任何 S 类型,以便搜索该状态的策略。现在,因为状态派生类是多态的,我认为这是正确的做法:
其中 iter 是 Actions 的迭代器,每个 action 都有一个State *nextstate;
action->nextstate 指针设置在其他点:
我可以对整个类 Action 进行模板化,以避免使用State *nextstate;
和使用S *nextstate;
,但这需要在整个项目中进行大量更改。
阅读cplusplus.com上的转换教程,我的理解是最好使用 dynamic_cast,因为它会在向上或向下转换之前进行类型检查。但是,在转换后的以下代码中,除了将其用于搜索之外,我对向上转换的状态不做任何事情:
其中 findPolicy 是:
- 可以跳过安全检查并使用静态演员表吗?我已经尝试过了,它可以编译。
- 可以完全跳过检查并进行 reinterpret_cast 吗?我也试过了,它可以编译。
- 进行 dynamic_cast 的惩罚是什么?我知道开销很小,但这有什么严重的吗?
- 有没有办法在不使用多态类(避免虚函数并简单地覆盖它)的情况下从 State *ptr 向上转换为 S-type *ptr?