【发布时间】:2012-07-24 07:31:27
【问题描述】:
除了下面第二个std::cout 中选择的方法之外,还有更简单的方法可以访问Derived 类中的成员函数GetJ() 吗?
#include <iostream>
#include <memory>
class Base
{
int i;
public:
Base(int k) : i(k) {}
int GetI() { return i; }
};
class Derived : public Base
{
int j;
public:
Derived(int u) : Base(10) { j = u; }
int GetJ() { return j; }
};
int main()
{
std::unique_ptr<Base> uptr(new Derived(5));
std::cout << uptr->GetI() << std::endl;
std::cout << static_cast<Derived*>(uptr.get())->GetJ() << std::endl;
}
【问题讨论】:
-
顺便说一个简单的
static_castworks just as fine。 -
@chris:也就是说,只要你明确知道基指针指向那个特定的派生类。
-
@Xeo,是的,但即使您不这样做,
reinterpret_cast也不是您的最佳选择。 -
@chris:天哪,我读到
dynamic_cast... 哦,天哪。 -
@chris 感谢您的建议。我已经编辑了代码。
标签: c++ c++11 derived-class unique-ptr