函数语义学:
一.静态类型和动态类型:
静态类型:对象定义时的类型,编译期就能确定的
动态类型:对象目前所指向的类型(运行的时候才决定的类型);一般只有指针和引用才有动态类型的说法
二.静态绑定和动态绑定:
静态绑定:绑定的是静态类型,所对应的函数或者属性依赖于对象的静态类型,发生在编译期
动态绑定:绑定的是动态类型,所对应的函数或者属性依赖于对象的动态类型,发生在运行期
1)普通函数是静态绑定,虚函数是动态绑定
2)缺省参数一般是静态绑定{
Class A{
Public:
Virtual fun(int I = 1){std::cout << A << I;}
}
Class B:public A{
Public:
Virtual fun(int I = 2){std::cout << B << I;}
}
}
A* a = new B();
a->fun() 会显 B 1;
三.虚函数的动态绑定:
虚函数的动态绑定,却决于虚函数调用者的动态类型
四.C++中多态性的体现
走的是通过虚函数表来找到虚函数入口地址再去执行函数的,是多态