以下代码有什么问题吗?特别是我对使用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;
}
答案 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_cast
到Derived*
:
Base2* instance2 = dynamic_cast<Derived*>(instance1);
(或static_cast
如果您知道 *instance1
确实是Derived
,并且您不希望动态调度开销。不建议使用。 )