使用reinterpret_cast

时间:2015-11-04 17:25:11

标签: c++ inheritance multiple-inheritance reinterpret-cast

以下代码有什么问题吗?特别是我对使用reinterpret_cast感兴趣。

class Base1
{
public:
    virtual void foo(){}
};

class Base2
{
public:
    virtual void bar(){}
};

class Derived : public Base1, public Base2
{
};

int main()
{
    Base1* instance1 = new Derived();
    instance1->foo();

    Base2* instance2 = reinterpret_cast<Base2*>(instance1);
    instance2->bar();

    return 0;
}

2 个答案:

答案 0 :(得分:3)

reinterpret_cast不知道如何处理兄弟姐妹之间的转换(例如在vtable实现中它不会修复this指针)因此它肯定不起作用。请注意,它可能出现以执行您期望的操作。在这种情况下,您需要使用dynamic_cast,或者static_cast来导出base2,并使用隐式转换为protected void Page_Load(object sender, EventArgs e) { // Initializes a new instance of the DataAccess class DataAccess da = new DataAccess(); // The styling of the graph chart1.Series["Series1"].ChartType = SeriesChartType.Column; chart1.Series["Series1"].IsValueShownAsLabel = true; // The required lines for getting the data from the method in the DataAccess chart1.DataSource = da.select_top_sheep(farmerID); chart1.Series["Series1"].XValueMember = "SheepID"; chart1.Series["Series1"].YValueMembers = "Weight"; chart1.DataBind(); }

答案 1 :(得分:1)

在这种情况下,首选简单的dynamic_castDerived*

Base2* instance2 = dynamic_cast<Derived*>(instance1);

(或static_cast如果您知道 *instance1确实是Derived,并且您不希望动态调度开销。不建议使用。 )