gpt4 book ai didi

c++ - C++ 中的向上转型和向下转型

转载 作者:行者123 更新时间:2023-11-30 00:57:25 32 4
gpt4 key购买 nike

class file {
std::string name;
};

class directory : public file {
std::vector<file*> entries;
};

directory d;
file f;

f = d; // Only d.name is copied to f; entries are lost

如果我们这样做:

directory* dp = new directory;
file* fp ;

fp = dynamic_cast<file*>(dp);

将条目和标识保留为目录对象,或者仍然只有 dp->name 被复制到 f;条目丢失。


另外,downcast 是如何工作的?

如果我们这样做会发生什么:

dp = dynamic_cast<dp*> (fp);

最佳答案

我会尽量简单地解释,但您仍应阅读更多相关文档。

directory d;
file f;

f = d; // Only d.name is copied to f; entries are lost

这是因为目录和文件的类型和大小不同。文件的大小为 sizeof(file),目录为 sizeof(directory),大于 sizeof(file)。即使是原始内存拷贝也只会将目录的文件部分复制到文件对象,或者如果您打算复制更多内容,则会出现未定义的行为。

directory* dp = new directory;
file* fp ;

fp = dynamic_cast<file*>(dp);

首先,动态转换在这里不起作用,因为它们不是多态类型。如果是这样,这些只是指针。由于目录 是一个 文件,您可以使用文件指针指向目录。该对象位于相应的位置。但是您无权通过文件指针访问独占目录成员,除非您回退。

dp = dynamic_cast<dp*> (fp);

如上所述,您正在重新获得目录成员对原始指针的访问权限。

关于c++ - C++ 中的向上转型和向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223365/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com