Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++,我们可以将子类对象强制转换为父类类型,还是反之亦然。?_C++ - Fatal编程技术网

C++ c++,我们可以将子类对象强制转换为父类类型,还是反之亦然。?

C++ c++,我们可以将子类对象强制转换为父类类型,还是反之亦然。?,c++,C++,我尝试了这段代码,但得到了这个编译错误 class A{ }; class B : public A{ }; int main() { A a = new B(); // ERROR: "No suitable constructor exists to convert from "B*" to "A". B b = new A(); // ERROR: "No suitable constructor exists to convert from "A*" to "B". } 我是C+

我尝试了这段代码,但得到了这个编译错误

class A{
};
class B : public A{
};
int main()
{
A a = new B();  // ERROR: "No suitable constructor exists to convert from "B*" to "A".

B b = new A();  // ERROR: "No suitable constructor exists to convert from "A*" to "B".
}

我是C++新手,努力学习。有人能帮我理解这一点吗。

唯一有意义的方法是让父类型包含派生类。这样,您可以调用派生类的所有虚方法和父类的非虚方法。同样,当这样存储时,您可以将其动态转换为从派生到父类(例如
A*A=dynamic\u cast(new B());

另一个例子是:

std::vector<A> vec;
vec.push_back(B());
A* ptr = new B();
std::unique_ptr<A> unique = std::make_unique<B>();
std::向量向量向量机;
向量推回(B());
A*ptr=新的B();
std::unique_ptr unique=std::make_unique();

首先,只有在处理指针对象时才使用new。 像

其他明智的使用 A A

第二,你必须明确地做向下预测,即:

 B * b = (B*) (new A());

A*A=新的B()将编译,因为这将生成一个指针。相反的方法是不可能的。您可以使用测试编译@πάντα的内容ῥεῖ: 谢谢。它能理解我错过了什么。A*A=新的B();工作。
A()是一个函数声明。也许你的意思是
A@Misgevolution在后一段代码中,您可能是指向下投射snippet@FdeF是的,谢谢你的建议。
 B * b = (B*) (new A());