jjzjj

upcasting

全部标签

java - java中的隐式向上转型和显式向下转型

当java可以隐式进行向上转换时,为什么它不能隐式进行向下转换?请用一些简单的例子解释一下? 最佳答案 重点是向上转型总是会成功,所以它是安全的——而向下转型可能会失败:Stringx=getStringFromSomewhere();Objecty=x;//Thiswill*always*work但是:Objectx=getObjectFromSomewhere();Stringy=(String)x;//Thismightfailwithanexception因为这是一个“危险”的操作,语言强制您明确地执行它-您基本上是在对编译

java - 向上转换为对象的 ArrayList 然后向下转换为自定义 ArrayList 的成本

我有一种情况,我正在从数据库中获取数据,我想将其上传到ArrayListofobjects然后将其向下转换为不同的自定义ArrayList即List,List等我的问题是向上转换为对象然后向下转换为ArrayList,成本是多少,它是有效的还是好的做法。已编辑而不是获取数据为List,List等等我想获取数据为ArrayList一次然后根据我的需要,我将数据向下转换为ArrayList,ArrayList稍后。 最佳答案 “向下转换”不是一个好主意,因为您不需要使用任何特定于ArrayList的方法。您应该能够为所有事物使用List

java - 在 Java 中,为什么将字符类型转换为整数不扩展符号位

在Java中,按位运算会导致类型转换为整数,还会导致符号扩展。例如,预计会出现以下情况:byteb=-1;System.out.println(b>>1);//-1在Java中,字符以UTF-16编码,每个单元用2个字节表示。charc=0xFFFF;//Iassumenowthesignbitis1.System.out.println(c>>1);//32767????WHY我期待的是-1而不是32767。为什么在应用按位运算之前的类型转换期间没有扩展符号?有什么想法吗? 最佳答案 因为char是无符号的-0xFFFF的实际值为

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

在我正在编写的程序中,我有一个类RestrictedUser和类User派生自RestrictedUser。我正在尝试通过转换为RestrictedUser来隐藏用户特定的方法,但是当我进行转换时,用户方法仍然可用。此外,当我运行调试器时,变量的类型显示为User。RestrictedUserrestricted=regularUser;Java中的向上转换是否隐藏了子类的方法和字段,还是我做错了什么?有解决方法吗?谢谢 最佳答案 如果您尝试运行此代码:Useruser=newUser(...);RestrictedUserrest

c++ - upcast 对象的地址

假设B是D的基类(可能是虚的,可能是多重继承,不一定是直接基类)。设obj是D类型的对象(不是D的子类——恰好是D).让D*d=std::addressof(obj);B*b=d;我们可以安全地假设(char*)d?背景:这将成为确定某个对象是否已通过在特定aligned_storage中放置new创建的例程中的一个步骤。我需要确保,如果是,指向该对象的基础对象的所有指针都指向aligned_storage中的某个地址。 最佳答案 我很确定你的假设是安全的,因为D是对象的最终类型。否则一开始就使用placementnew是不可靠的。

c++ - 仅用于向上转换

我们都知道C风格的转换在C++中被认为是邪恶的。这就是为什么它们被const_cast取代的原因,static_cast,和dynamic_cast提供更多定制的转换,允许程序员只允许预期的转换类。到目前为止,还不错。但是,似乎没有内置语法来执行显式向上转换:一种在Base&baseRef=derived中执行隐式转换的方法。明确不允许相反。虽然我知道这是一个很小的极端情况(大多数时候隐式转换工作得很好),但我想知道有什么技术可以在用户代码中实现这样的强制转换。我在想一些类似的事情templateclassupcast{public:template::value>::type>upc

c++ - 作者所说的不良结果是什么?

此示例摘自BruceEckel的“ThinkinginC++”第14章“UpcastingandtheCopyConstructor”部分。#includeusingnamespacestd;classParent{inti;public:Parent(intii):i(ii){cout作者对这段代码作了如下评论:“Child的运算符returnos我也运行程序,将上面的指令替换为:returnos并且proprom运行没有问题,只有一个预期的差异。现在Parent再次调用复制构造函数以复制参数c到Parent::operator.那么,作者所说的不良结果是什么?

c++ - 删除向上转换为基指针的对象数组

开始将一些库从msvc移动到mingw,并发现当有人想要删除一个arrayupcastedobjects时msvc的非常有趣的行为。即msvc做了一些黑魔法(它似乎喜欢这样做)并且波纹管代码执行得很好,但是在mingw中(4.7.2(崩溃。我相信mingw正在正确执行并且它的msvc巫术就是制作睡虫。代码:#includeclassfoo{staticintidgen;protected:intid;public:foo(){id=idgen++;std::coutmsvc2010的输出Hello(foo-0)Hello(bar-0)Hello(foo-1)Hello(bar-1)By

c++ - 无法从 'DerivedClass *' 转换为 'BaseClass *&'

我尝试了下面的代码,并得到了一个编译错误。classA{};classB:publicA{};voidf(A*&p){}intmain(){B*pB;f(pB);//cannotconvertargument1from'B*'to'A*&'return0;}如何让f(pB)调用f(A*&p)函数? 最佳答案 传递给非const引用的指针变量必须与引用匹配相同的数据类型。该函数需要对A*指针的引用,因此这就是您必须提供的内容。如果您有一个B*指针开始,首先将它分配给一个A*变量(因为B派生自A):B*pB=...;A*pA=pB;f(

c++ - 向上转换时的隐式转换与 static_cast

假设我有三个类:A(母亲,抽象),B和C,A的child。所以B和C继承自A(公有继承)。我有一个指向A的指针列表,我用B或C的指针填充它。问题是:在进行转换/转换时,哪种风格是首选?classA{};classB:publicA{};classC:publicA{};B*objB=newB();C*objC=newC();std::listmyList;//OptionA:staticcastconversionmyList.push_back(static_cast(objB));myList.push_back(static_cast(objC));//OptionB:impli