首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >参考文献

参考文献
EN

Stack Overflow用户
提问于 2022-01-08 10:01:04
回答 1查看 83关注 0票数 0

让我们假设以下代码编译:

代码语言:javascript
运行
复制
int main()
{
    A* p = new B();     // 1
    C& c = p->method(); // 2
    *c = *p;            // 3
    c = *p;             // 4
}

如果存在而不是,那么单个operator=就会要求类ABC--而不是--对其中任何一个类都是一个转换操作符。

B是否有可能继承自A,继承自C?第3行和第4行如何编译?

EN

回答 1

Stack Overflow用户

发布于 2022-01-09 21:37:54

这条线

*c = *p

如果没有重载*操作符,就无法编译C。引用虽然与指针有很多相似之处,但并不是指针。它们不是内存地址,因此不能取消引用。相反,它们充当指针,每当使用时都会自动取消引用。此外,不能重新分配引用来指向不同的对象,因此,尽管如果将代码更改为c = *p,代码将编译,但它不会按预期工作。c仍然指向method返回的对象。

如果您将ABC作为指向C的指针而不是引用,并删除第4行,则可能会出现这样的关系。

代码语言:javascript
运行
复制
int main()
{
    A* p = new B(); // works because B inherits from A
    C* c = p->method(); // works because is "method" is a member function
                        // of A and returns a pointer to an instance of C
    c* = *p;            // works because A inherits from C
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70631280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档