投射和虚拟功能

时间:2018-04-19 08:49:12

标签: c++

我正在研究强制转换和虚函数。我有一个名为Base的基类和一个名为Derived的派生类,具有公共继承。在基类和派生类之间,我有一个名为Show的函数,它具有虚拟行为:

Derived clientsD = Derived(" Rui Pedro", 2000, 50.00);  
Derived* PclientsD -> &clientsD;
Base* clientesB =(Base*) PclientsD; 
clientesB -> Show();

代码有效,但被调用的函数是派生类中重新定义的函数而不是BaseShow函数? 我期待查看Base类Show而不是派生的类,因为我进行了转换。如果我将派生指针强制转换为基类指针,这也是行为。当我进行转换时,指针转换应该打印基类函数,尽管有虚拟行为。这是我期望在没有范围解析运算符clientesB -> Base::Show();的情况下查看的内容。

2 个答案:

答案 0 :(得分:3)

调用派生的Show,因为您已在virtual中将其标记为Base

如果您不想要这种行为,请删除virtual或使用范围解析运算符并调用

clientesB->Base::Show();

答案 1 :(得分:0)

这是因为您在基类的函数声明中使用了virtual