https://www.cnblogs.com/AndyJee/p/4575670.html
对象的静态类型:
对象在声明是采用的类型,在编译期确定;
对象的动态类型:
当前对象所指的类型,在运行期决定,对象的动态类型可以更改,但静态类型无法更改。
静态绑定:
绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。
动态绑定:
绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。
只有虚函数才使用的是动态绑定,其他的全部是静态绑定。
当缺省参数和虚函数一起出现的时候情况有点复杂,极易出错。我们知道,虚函数是动态绑定的,但是为了执行效率,缺省参数是静态绑定的。
#include<iostream>
using namespace std;
class B
{
public:
virtual void DoSomething(int i=10)
{
cout<<i<<"base"<<endl;
}
void func()
{
cout<<"base func"<<endl;
}
};
class D:public B{
public:
virtual void DoSomething(int i=20)
{
cout<<i<<"derive"<<endl;
}
void func()
{
cout<<"derive func"<<endl;
}
};
int main()
{
D* pD =new D();
B* pB =pD;
pD->DoSomething();
pB->DoSomething();
pD->func();
pB->func();
}
$ ./a.exe
20derive
10derive
derive func
base func
2326

被折叠的 条评论
为什么被折叠?



