Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 新运算符前的括号-意思是?_C++_Static_New Operator_Multiple Inheritance - Fatal编程技术网

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*
。示例是编译的。示例是编译的。