问题标签 [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.

0 投票
10 回答
5910 浏览

java - Java中的向上转换是否隐藏了子类方法和字段?

在我正在编写的程序中,我有一个类RestrictedUser和一个User派生RestrictedUser.自我试图通过强制转换来隐藏用户特定方法的类,RestrictedUser但是当我进行强制转换时,用户方法仍然可用。此外,当我运行调试器时,变量的类型显示为User.

在 Java 中进行强制转换是否隐藏了子类方法和字段,还是我做错了什么?有解决方法吗?

谢谢

0 投票
6 回答
117247 浏览

c# - 垂头丧气

我是C#(和OOP)的新手。当我有如下代码时:

问题 1:如果我有其他代码可以做到这一点:

Employee是 a Manager,但是当我像这样将它转换为 anEmployee时,这意味着我正在向上转换它吗?

问题 2

当我有几个Employee类对象并且其中一些但不是全部是Manager's 时,我怎样才能在可能的情况下向下转换它们?

0 投票
5 回答
2481 浏览

c++ - 向上转换指针引用

我有以下人为的示例(来自真实代码):

当我尝试编译它时,我得到:

1) 显然 gcc 被构造函数弄糊涂了。如果我从构造函数中删除引用,那么代码就会编译。所以我的假设是向上转换指针引用出了点问题。有人能告诉我这里发生了什么吗?

2)一个稍微不相关的问题。如果我要在构造函数中做一些可怕的事情,比如“删除其他”(请耐心等待),当有人向我传递一个指向堆栈上某物的指针时会发生什么?

如何确保该指针合法地指向堆上的某些东西?

0 投票
6 回答
231 浏览

c++ - 如果不在纯虚拟基类中创建显式函数,就不能完成复制构造吗?

我的目标是做一个类的深拷贝,但是一个虚拟类却造成了麻烦。

编译错误信息:

我计划拥有更多从 Vir 继承的 Handler 类(如 Handler1、Handler2 等),并将拥有自己独特的成员(如 float a; 或 double b; 等)。因此,将所有 Handler 类的所有 getter 和 setter 函数保留在 Vir 类中对我来说是没有意义的。我想在 Handler 类中保留我的 getter 和 setter 方法,因为这些成员对于 Handler 类是唯一的。编译器不允许我这样做。帮助?

0 投票
8 回答
944 浏览

c# - 如何覆盖虚拟方法,但仍调用 C# 中的基类版本

我有一个简单的类层次结构,其中有一个被覆盖的虚拟方法。但是在某些调用点我想调用这个方法的基类版本而不是虚拟方法。

例如:

0 投票
7 回答
1277 浏览

java - 制作对象时向上转型

假设您有一个Shape基类和各种派生类型:Circle等。

在制作新对象时,是否有任何理由在此处向上转换,通过编写以下代码:

而不是这个:

这两个陈述中的每一个所产生的s对象是否彼此不同?

0 投票
5 回答
1579 浏览

c++ - 如何在 CRTP 中实现向下转换是否有效的编译时检查?

我有一个普通的旧 CRPT(请不要被访问限制分心 - 问题不在于它们):

像往常一样打算这样使用:

现在这static_cast让我很困扰。我需要一个向下转换(不是向上转换),所以我必须使用显式转换。在所有合理的情况下,转换都是有效的,因为当前对象确实属于派生类。

但是,如果我以某种方式改变了层次结构并且演员现在变得无效怎么办?

在这种情况下,我可以以某种方式强制执行显式向下转换是否有效的编译时检查吗?

0 投票
1 回答
308 浏览

java - 使用 null 调用函数时自动向上转换

此代码打印出来MyUrgentException。有人可以解释为什么吗?

0 投票
4 回答
2350 浏览

java - Java中向上转换的问题?

有人可以解释为什么会这样:

但是产生的输出是:

为什么该.setType()方法执行子类方法,而不是超类方法,即使我正在向上转换,可以看出?

0 投票
1 回答
870 浏览

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?