10得票3回答
为什么C风格的转换允许你转换为私有基类?

假设我们有以下代码:class A { public: A() : x(1) {} virtual ~A() {} int x; }; class B { public: B() : y(2) {} virtual ~B() {} void...

10得票2回答
使用std::dynamic_pointer_cast进行up-casting std::shared_ptr

我开始学习在C++0X/11中使用智能指针,并遇到了一个奇怪的情况。我想使用shared_ptr向上转型一个对象实例。 类Extend继承自类Base,其中Base类有一个虚析构函数以使其具有多态性(否则dynamic_pointer_cast会抱怨非多态类强制转换)。 因此:std::s...

9得票4回答
向上转型及其对堆的影响

对于以下类: public class Parent { //Parent members } public class ChildA : Parent { //ChildA members } public class ChildB : Parent { //ChildB member...

9得票5回答
如何在CRTP中实现编译时检查向下转型是否有效?

我有一个普通的CRPT(请不要被访问限制所分散注意力 - 问题与此无关): template<class Derived> class Base { void MethodToOverride() { // generic stuff he...

9得票1回答
Java中的隐式向上转型和显式向下转型

当Java可以隐式地进行向上转型时,为什么它不会隐式地进行向下转型?请举些简单的例子加以解释。 例如: ``` class Animal { public void eat() { System.out.println("Animal is eating"); } } c...

8得票2回答
在Java中,为什么将字符强制转换为整数时不会扩展符号位?

在Java中,位运算会导致类型转换为整数并且还会引起符号扩展。例如,以下情况是期望的: byte b = -1; System.out.println(b >> 1);//-1 在Java中,字符使用UTF-16编码,每个单元使用2个字节表示。 char c = 0xFFF...

8得票10回答
Java中的向上转型是否隐藏了子类的方法和字段?

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

8得票1回答
放置新对象和继承

大家晚上好。 一段代码片段胜过千言万语: // Storage suitable for any of the listed instances alignas(MaxAlign<Base, Derived1, Derived2>::value) char storage[Max...

8得票1回答
什么是“upcast”?

我可以看到术语“upcast”与OOP有关,但是在互联网上搜索时找不到精确的定义。 请问有人能解释这个术语的含义以及在什么情况下使用这种技术吗?

7得票7回答
如何将对象转换为其实际类型

Consider the following piece of code: class MyClass { } class MyClass2 : MyClass { } private void Foo(MyClass cl) { //cl is actually MyClass...