为什么第一个语句ptr-> show()显示基数,尽管我指定* ptr = dv1 但第二个声明ptr-> show()显示Derv2我预计首先显示Derv1和两个显示Derv2
class Base {
public:
virtual void show()
{
cout << "Base\n";
}
};
class Derv1 : public Base //derived class 1
{
public:
void show()
{
cout << "Derv1\n";
}
};
class Derv2 : public Base
{
public:
void show()
{
cout << "Derv2\n";
}
};
int main()
{
Derv1 dv1; //object of derived class 1
Derv2 dv2; //object of derived class 2
Base* ptr = new Base(); //pointer to base class
*ptr = dv1; //put value of dv1 in pointer
ptr->show(); //execute show()
ptr = &dv2; //put address of dv2 in pointer
ptr->show(); //execute show()
return 0;
}
答案 0 :(得分:0)
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
此代码会从*ptr = dv1; //put address of dv1 in pointer
创建Base
的副本,并复制到仍为[{1}}类型的dv1
。
ptr
此代码告诉Base
指向ptr = &dv2; //put address of dv2 in pointer
的地址,ptr
是dv2
类型的对象。由于Derv2
是虚拟的,因此它正确调用了Base::show
的{{1}}实现。
答案 1 :(得分:0)
声明*ptr = dv1
表示Derv1
课程将被投放到base
课程,从而输出&#39; base&#39;
这是因为*ptr
取消引用指针并有效地说base &
。因此,Derv1
类可以轻松地转换为base &
,因为它继承了base
然而,ptr = &dv2
意味着它将指向dv2
的内存地址,因此,当调用该函数时,它将来自dv2
,从而输出&#39}。 Derv2&#39;