问题标签 [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.
primitive-types - 上铸和下铸有什么区别?
关于原始数据类型和引用数据类型的向上转换和向下转换有什么区别。
例如,在原始类型中,我们说向上转换是从低到高(int 到 double),向下转换是从高到低(double 到 int)。为此,我们使用强制转换运算符。
但是对于引用的数据类型,它与前一种情况相反。例如,动物只包含callme()
方法,而狗包含callme()
和callme2()
方法,那么我们怎么能说动物比狗高。
c++ - 无法从 'DerivedClass *' 转换为 'BaseClass *&'
我尝试以下代码,并得到一个编译错误。
如何解决使 f(pB) 调用 f(A*&p) 函数?
php - PHP向上转换对象
我可以将一个对象向上转换为它的父对象吗?
示例代码
是否可以在 PHP 中使用?
在我的场景中,我正在构建 ClassB 并且我想覆盖函数 ClassB::Foo() 以扩展其行为,然后将控件处理回它的父函数 ClassA::Foo() 但代码中断,因为它现在是一个对象B类。请不要因为“代码气味”而责备我,因为我现在觉得它很难看!ClassA 是我无法控制的... :-)
c++ - 类的转换(向上转换)
我有一个名为 "obj" 的类和另一个名为 "aggregate" 的类。
第二个是从第一个衍生而来的。
“obj”类只包含一个整数。“聚合”仅此而已(只有更多“方法”)。
我有一个返回“obj”的函数
我需要将它的结果分配给“聚合”类的变量。
聚合 a;a=pop();
我尝试这样做:
因为基本上在堆栈上传递了结构的值(所以本质上是一个整数)我不明白为什么我应该这样做:
c++ - 安置新和继承
各位晚上好。
一个代码片段将值一千字:
如您所见,我只想通过其基类访问实例,而不实际存储基类指针。请注意,在第二部分中,Derived2
类型信息将丢失,所以我只剩下storage
一个派生实例在其中的保证。
由于placement new 从不调整目标指针,这归结为使用reinterpret_cast
向上转换为基类。现在我知道这很危险,因为static_cast
在某些情况下调整指针更合适。[1]
事实上,它触发了未定义的行为。您可以在 Coliru (g++ 4.9.0) 上找到完整的代码,它会在运行时立即崩溃。同时在我的电脑(g++ 4.8.2)上,一切都很好。请注意,在 g++ 4.9 上,在调用函数之前输出两个指针会显示相同的值......并且可以工作。
所以我试图把问题倒过来:轻推派生实例,使指向的指针Base
等于storage
.
没运气。这件事在 g++ 4.8 上仍然运行良好,并在 g++ 4.9 上火了。
编辑:想想看,上面不是那么聪明。因为,如果派生实例在......之前结束怎么办。 storage
所以我的问题是:我想要实现的目标有解决方案吗?或者,[1] 中提到的案例是否定义得足够好,以至于我可以编写适用于类子集的代码(例如,没有虚拟继承)?
c# - 从基类到扩展的 C# 隐式转换 (System.Reflection.Assembly)
我一直在处理提到的项目c-sharp-compilerresults-generateinmemory。
我一直在编写大量代码来实现我的“类发现”。它很酷,但我意识到如果我将所有东西都实现为“System.Reflection.Assembly”的派生类,效率会高得多。
因此,在编写了新的派生类后,我遇到了一个问题。当我尝试将基类分配给新的派生类时,它会抛出一个错误,只是正常的did you miss an explicit cast
错误。
我认为 C# 对扩展类型进行了隐式转换?
所以我有一些这样的源代码......
所以因为这只是我写 C# 的第二周,所以我不得不问......
我如何将基类添加到我的类中?
这里的问题... 为什么我不能在 C# 中将隐式运算符从基类写入派生类?
这似乎表明我的选角应该有效,除非我误解了答案。
c++ - 为什么我不能使用在堆栈上创建的对象进行向上转换?
这是向上还是不是?如果不是,请描述原因。提前致谢。
C++ 代码:
java - 子类的对象不能调用自己的方法
如果c
是一个ChildClass
对象,那么为什么它不能调用 的方法ChildClass
?喜欢:
尤其是:
这s
是 的对象StringBuffer
,但是s.append(null)
是编译时错误。为什么这样?
c++ - c++函数参数,自动向上转换多个模板类
我有一个函数,将一个具有多个参数的模板类作为参数(参见以下代码中的“func2”)。我希望该函数能够将继承自 agument 类型的类作为参数,并通过向上转换自动解析模板类型。在下面的示例中,函数 'func1' 可以,但当参数是函数 'func2' 的多个模板类时,显然不可能直接。
错误消息指出:“候选模板被忽略:替换失败:模板模板参数的模板参数与其相应的模板模板参数不同”我理解(并且有点同意)该消息。但这对于 'func1' 来说是相同的情况,并且工作正常。
所以我的问题是,有没有一种方法可以在使用函数时通过自动向上转换将变量“d”视为“C”类型?如果是这样,如何?我正在使用 Xcode 5.1.1,clang-503.0.40。和 C++11 选项。谢谢
c++ - upcasting 和 vtables 如何协同工作以确保正确的动态绑定?
因此,vtable
是一个由编译器维护的表,其中包含指向该类中的虚函数的函数指针。
和
将派生类的对象分配给祖先类的对象称为向上转换。
向上转换是使用基类指针或引用处理派生类实例/对象;对象未“分配给”,这意味着覆盖值 ala operator= 调用。
(感谢:托尼 D)
现在,如何在运行时知道应该调用“哪个”类的虚函数?
vtable 中的哪个条目是指应该在运行时调用的“特定”派生类的函数?