我正在研究强制转换和虚函数。我有一个名为Base
的基类和一个名为Derived
的派生类,具有公共继承。在基类和派生类之间,我有一个名为Show
的函数,它具有虚拟行为:
Derived clientsD = Derived(" Rui Pedro", 2000, 50.00);
Derived* PclientsD -> &clientsD;
Base* clientesB =(Base*) PclientsD;
clientesB -> Show();
代码有效,但被调用的函数是派生类中重新定义的函数而不是Base
类Show
函数?
我期待查看Base类Show
而不是派生的类,因为我进行了转换。如果我将派生指针强制转换为基类指针,这也是行为。当我进行转换时,指针转换应该打印基类函数,尽管有虚拟行为。这是我期望在没有范围解析运算符clientesB -> Base::Show();
的情况下查看的内容。
答案 0 :(得分:3)
调用派生的Show
,因为您已在virtual
中将其标记为Base
。
如果您不想要这种行为,请删除virtual
或使用范围解析运算符并调用
clientesB->Base::Show();
答案 1 :(得分:0)
这是因为您在基类的函数声明中使用了virtual
。