C++ 新运算符前的括号-意思是?
对于子类,我有以下代码:C++ 新运算符前的括号-意思是?,c++,static,new-operator,multiple-inheritance,C++,Static,New Operator,Multiple Inheritance,对于子类,我有以下代码: class child1 : public parent { public: static parent* function1(void) { return (child2*) new child1; } //... }; Child2是从父类继承的另一个类 在新运算符前面使用括号的意义是什么,即(child2*)? 解释函数功能的最佳方式是什么 return (child2*)new child1; 那是C风格的演员阵容。它
class child1 : public parent {
public:
static parent* function1(void) {
return (child2*) new child1;
}
//...
};
Child2
是从父类继承的另一个类
在新运算符前面使用括号的意义是什么,即(child2*)
?解释函数功能的最佳方式是什么
return (child2*)new child1;
那是C风格的演员阵容。它将指针从child1*
投射到child2*
如果您打算将它从一种指针转换为另一种指针,那么应该使用dynamic_cast关键字
return dynamic_cast< child2 * >( new child1 );
返回动态\u cast(新child1);
C++提供了几个类型转换,以明确您想要的类型转换。它为多态铸造提供了动态映射(即,确实有一个VTABLE),STATICE-CAST CAST用于铸造不具有多态性的对象(即,没有VTABLE),RealTytQuestCAST告诉编译器将对象内的字节视为一种不同类型的对象,并且CSTOSTCAST抛出恒定性或易失性。(或投射到常量或易变对象中)
< >许多C++程序员永远不会使用C样式的转换,因为它的语法没有提供你想要的线索。
您还应该知道child1和child2是否相关。其中一个应该是另一个的派生类。如果不是,动态_cast将返回null ptr
这是一个C样式转换。它将指针从child1*
转换为child2*
如果您打算将它从一种指针转换为另一种指针,那么应该使用dynamic_cast关键字
return dynamic_cast< child2 * >( new child1 );
返回动态\u cast(新child1);
C++提供了几个强制转换,以明确您想要的强制转换类型。它为多态强制转换(即-有vtable)提供动态强制转换,为非多态强制转换对象(即-没有vtable)提供静态强制转换再解释,编译器告诉编译器把对象内的字节视为一种不同的对象,并const抛出静态或易失性(或转换成一个常量或易失性对象)。
< >许多C++程序员永远不会使用C样式的转换,因为它的语法没有提供你想要的线索。
您还应该知道child1和child2是否相关。其中一个应该是另一个的派生类。如果不是,动态转换将返回null ptr。这里的括号仅对类型Parent执行静态转换 但在这里,由于不能将child1的对象强制转换为child2的对象,所以这不会编译。 您可以使用dynamic_cast强制转换不同类型的对象,但由于child2是从父对象派生的&而不是从child1派生的,因此此强制转换将重新运行nullptr 它将填充一个错误作为 错误1错误C2440:“返回”:无法从“child2*”转换为“Parent”
您应该强制转换到类型Parent。这里的括号仅对类型Parent执行静态转换 但在这里,由于不能将child1的对象强制转换为child2的对象,所以这不会编译。 您可以使用dynamic_cast强制转换不同类型的对象,但由于child2是从父对象派生的&而不是从child1派生的,因此此强制转换将重新运行nullptr 它将填充一个错误作为 错误1错误C2440:“返回”:无法从“child2*”转换为“Parent”
您应该使用Parent类型。我认为它在这里没有任何意义,甚至(child2*)将执行指针强制转换。
new child1
将返回类型为child1*
的指针,然后它将转换为child2*
,但最终它将成为parent*
。因为函数返回类型是parent*
。我认为它在这里没有任何意义,甚至(child2*)将执行指针强制转换。new child1
将返回类型为child1*
的指针,然后将其转换为child2*
,但最终它将成为parent*
。因为函数返回类型为parent*
。示例是编译的。示例是编译的。