160得票9回答
关于类变量,向上转型和向下转型有什么区别?

向上转型和向下转型在类变量方面有什么区别? 例如,在以下程序中,Animal类仅包含一个方法,但Dog类包含两个方法,那么我们如何将Dog变量强制转换为Animal变量。 如果进行转换,那么我们如何使用Animal的变量调用Dog的另一个方法。class Animal { publ...

114得票12回答
为什么在Java中要给子对象分配一个父对象的引用?

我提出了一个非常简单的问题,但是我有点困惑。 假设我有一个类Parent:public class Parent { int name; } 还有另一个类Child:public class Child extends Parent{ int salary; } 最后是我的...

104得票6回答
下转型和上转型

我刚开始学习 C#(以及 OOP)。当我有以下类似代码时:class Employee { // some code } class Manager : Employee { //some code } 问题 1:如果我有其他代码执行以下操作: Manager mgr ...

24得票3回答
我可以用C风格的转换将派生类强制转换为私有基类吗?

我能做这个吗?class A { ... }; class B : private A { const A &foo() const { return *((const A *)this); } }; 我能否从一个私有继承自基类的子类,向其公共...

24得票9回答
向上转型和虚函数表如何共同确保正确的动态绑定?

因此,vtable是编译器维护的表,其中包含指向该类中虚函数的函数指针。 并且 将派生类的对象分配给祖先类的对象称为向上转型(up-casting)。 向上转型是使用基类指针或引用处理派生类实例/对象;这些对象不是 "被赋值",这意味着像operator=调用一样的值覆盖。(感谢:Ton...

15得票2回答
将空指针进行向上转型会导致未定义行为吗?

我在想下面的代码是否会导致未定义的行为:#include <cstddef> #include <cstdio> struct IA { virtual ~IA() {} int a = 0; }; struct IB { virtual ~IB() {...

12得票1回答
为什么在这个Scala代码中需要向上转型?

这段代码可以编译通过:import scala.collection._ trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]] extends SortedSetLike[A, This] { this: This...

11得票2回答
隐式转换 vs. static_cast 在向上转型时的区别

假设我有三个类:A(抽象的母类),B和C是A的子类。 因此,B和C从A继承(公共继承)。 我有一个指向A的指针列表,我用B或C的指针填充它。 问题是:在进行转换时,哪种样式更受青睐?class A {}; class B : public A {}; class C : public A...

11得票3回答
为什么在类型转换后Java对象类仍然保持不变?

我试图向上转换一个对象。但在运行时,对象的类仍然是一个派生类。Derived drv = new Derived(); Base base = (Base) drv; System.out.println("Class : " + base.getClass()); //prints ...

11得票5回答
如何将派生类对象添加到基类对象列表中

以下是给出的代码,我从Shape类继承了一个Circle类:class Shape { void Draw(); } class Circle : Shape { } void Main(string[] args) { Shape s = new Shape(); ...