【发布时间】:2019-07-26 21:55:29
【问题描述】:
我的课程如下:
class Base
{
public:
virtual int ReturnX()
{
return x;
}
private:
int x = 5;
};
class Derived : public Base
{
private:
int x = 10;
};
代码如下:
int main()
{
std::unique_ptr<Base> b = std::make_unique<Derived>();
std::cout << b->ReturnX() << std::endl;
}
我知道如果我在Derived 中覆盖ReturnX,那么基指针将正确使用正确的ReturnX,但我如何让它使用正确的x 值?我希望线路返回 10。
我不想只在构造函数中传递它的原因是我有许多 (10+) 多维 std::arrays 像 x 并且将它们单独传递给构造函数非常乏味。
【问题讨论】:
-
程序的行为是不确定的,因为唯一指针通过基指针销毁对象,而基类的析构函数是非虚的。
-
展示一个“乏味”程序示例,以便我们了解您要解决的问题。
-
如果要访问Derived的x,需要重写ReturnX函数并指定。
-
@John 如果功能相同,有没有办法使用'using'重新定义它而不复制和粘贴代码?
-
这样不行。子类继承了这个函数,但是如果你想让它做别的事情,那么你需要重写这个函数并告诉它要做什么。