作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么 s1->duplicate() 在代码示例 1 中不返回 Box*?我假设派生的拷贝被调用,因此返回了 Box*,但似乎返回了 Shape*。
代码示例 1:
#include <iostream>
struct Shape
{
virtual Shape* duplicate()
{
std::cout << "c" << std::endl;
return new Shape;
}
virtual void print()
{
std::cout << "SHAPE" << std::endl;
}
virtual ~Shape() {}
};
struct Box : public Shape
{
virtual Box* duplicate()
{
std::cout << "b" << std::endl;
return new Box;
}
virtual void print()
{
std::cout << "BOX" << std::endl;
}
};
int main(int argc, char** argv)
{
Shape* s1 = new Box;
Box* b1 = s1->duplicate(); //ISSUE HERE
b1->print();
delete s1;
delete b1;
return 0;
}
错误:34:27:错误:从“Shape*”到“Box*”的无效转换 [-fpermissive]
最佳答案
C++ 是“不变的”而非“逆变的”,这意味着指向基类的指针可以包含派生类的对象,但反之则不然。
所以在你的代码中:
Box* b1 = s1->duplicate(); //ISSUE HERE
上面你试图在 b1
中存储一个 shape
类的对象。哪个不正确。
您的克隆功能是正确的,但您误用了它。
我认为您没有正确理解多态性
是如何实现和工作的。
Shape* s1 = new Box; // s1 is of Type Shape whatever the type of object it point to be.
Box* b1 = (Box*)s1->duplicate();
b1->print();
关于c++ - 从虚方法返回派生对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50032959/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!