- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
抽象类的目的不是让开发人员创建基类的对象然后向上转换它,AFAIK。
现在,即使不需要向上转换,我仍然使用它,它是否在某些方面被证明是“不利”?
更多说明:
来自 C++ 中的思考:
Often in a design, you want the base class to present only an interface for its derived classes. That is, you don’t want anyone to actually create an object of the base class, only to upcast to it so that its interface can be used. This is accomplished by making that class abstract,
我所说的向上转型是指:baseClass *obj = new derived ();
最佳答案
向上转型对于非多态 类来说可能是不利的。例如:
class Fruit { ... }; // doesn't contain any virtual method
class Apple : public Fruit { ... };
class Blackberry : public Fruit { ... };
在某处上传它,
Fruit *p = new Apple; // oops, information gone
现在,你永远不会知道(没有任何手动机制)如果 *p
是 Apple
的实例或 Blackberry
.
[注意 dynamic_cast<>
不允许用于非多态类。]
关于c++ - "upcasting"的缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8047116/
我有这个例子: class One { public void testOne(){System.out.println("One!!!");} public void testTwo
我可以看到“upcast”一词与OOP有关,但我通过搜索互联网找不到确切的定义。 谁能解释这个术语是什么意思以及这种技术在什么情况下有用? 最佳答案 根据您发布的标签的描述: Upcasting pe
我定义了一个带有抽象约束的抽象类: abstract class Asset where P : Parm { } abstract class Parm { } class StockParm :
假设B是D的基类(可能是虚的,可能是多重继承,不一定是直接基类)。 设 obj 是 D 类型的对象(不是 D 的子类——恰好是 D ). 让 D * d = std::addressof(obj);
假设我有一个可以保存基类方法地址的指针类型。我可以将子类方法的地址分配给它并期望它正常工作吗?在我的例子中,我将它与基类指针一起使用,对象的动态类型是派生类。 struct B { typed
抽象类的目的不是让开发人员创建基类的对象然后向上转换它,AFAIK。 现在,即使不需要向上转换,我仍然使用它,它是否在某些方面被证明是“不利”? 更多说明: 来自 C++ 中的思考: Often in
为什么只有在 Main.main() 中取消注释第三条语句时才会出现 ClassCastException ?没有异常(exception),但第一条和第二条语句执行得很好? public class
只是玩类型转换。假设,我们有 2 个类 public class Base { public int a; } public class Inh : Base { public int
我有以下java代码: class A { int someMethod () { return 1; } int someMethod (A a) { return 2; } int some
两个类: public class ClassA implements ClassC { private static final long serialVersionUID = 111111
在 Java 中, "Up-casting is casting to a supertype, while downcasting is casting to a subtype. Supercas
我有 2 个类 Test(Base) 和 Program(child)。现在我在沮丧的时候遇到了一些问题。 Test t = new Program();// upcasting-wo
如果我有一个带有签名(String, Bool) 的元组,我不能将它转换为(String, Any)。编译器说: error: cannot express tuple conversion '(St
C# 工厂模式是否需要向上转型? 我希望类库 G 中的上帝在类库 A 中创建一个亚当,而不是让 G 依赖于 A。上帝产生亚当供类库 E 中的夏娃消费,夏娃知道并依赖亚当是可以的。(编辑 - 这个示例越
class A { } class B extends A { } class Main { public static void main(String[] args) {
假设我有一个现有的聚合 CustomAggregate 和一个由该聚合处理的事件 CustomEvent。 一段时间后,当事件存储已包含此聚合的一些事件时,我需要将聚合和事件重命名为 NewCusto
我正在使用 FunKTiale 库执行模式匹配。然后,当我按如下方式初始化变量时: private lateinit var socket = Option.None 下面的转换是不可能的: sock
我有两个 View ,A 和 B,都继承自 C。 在 Storyboard 中,我将 UIViewController 定义为 C 类型。 另一个 View ,比方说 D,有到 C 的两个 segue
我有一个二维 numpy 数组,我想将特定的 dtype 应用于每一列。 a = np.arange(25).reshape((5,5)) In [40]: a Out[40]: array([[ 0
我一直在阅读该站点上的其他一些主题,他们提到了 dynamic_cast 和 static_cast 是如何安全地进行向上转换的。 为什么向上转换甚至需要这些? 例如,如果类 B 派生自 A,则 A
我是一名优秀的程序员,十分优秀!