#include<iostream>
using namespace std;
int main(){
class c1{
public:
int func(){
cout<<"in the c1";
}
};
class c2:public c1{
public:
int func(){
cout<<" in c2";
}
};
c1* a;
c2 b;
a=&b;
a->func();
}
我知道我应该使用虚函数来获得所需的结果,但我想知道上面的代码中发生了什么。即为什么调用 c1::func() 而不是 c2::函数()?
另外请解释当使用 virtual
时会发生什么不同于这种情况。
最佳答案
当成员函数不是虚
时,调用的函数仅由点(.
)或箭头(->
) 运算符。这称为“静态类型”。
当一个成员函数是虚
时,被调用的函数由点左边的表达式命名的对象的实际最派生类型决定(.
)或由箭头左侧的表达式 (->
) 指向。这称为“动态类型”。
请注意,当点号左侧使用的变量、成员、参数或返回类型具有普通类类型时,静态类型和动态类型始终相同。但如果变量、成员、参数或返回类型是类类型的指针或引用,则静态类型和动态类型可以不同。
关于c++ - 虚拟成员函数和非虚拟成员函数的调用方式有何区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47026061/