首页 > 编程知识 正文

动态链接库与静态链接库,java静态绑定和动态绑定

时间:2023-05-06 15:52:40 阅读:27195 作者:2955

1、首先,明确概念:

静态类型:定义对象的类型,确定编译期间

动态类型:指针或引用指向的对象类型。 决定执行期间;

静态绑定:绑定静态类型;

动态绑定:绑定动态类型。

2、一些共识:非虚函数均静态绑定,虚函数均动态绑定

基类析构函数必须是虚函数。

3、静态绑定、动态绑定、虚拟析构有一定的关系:

class a { public :/* virtual */void func (} { STD 33603360 cout ' a ' STD 33603360 endl; }; classb : publica { public : void func (} { STD :3360 cout ' b ' STD 33603360 endl; }; 基类a的func ) )函数为非虚函数时,执行以下步骤

int main () {A *p=new B ); //p的静态类型为a,动态类型为BB *p1=new B (; //p1的静态型、动态型均为BB *p2=nullptr; p-func (; //输出: Ap1-func (; //输出: Bp2-func (; //输出: Bdelete p; p=nullptr; delete p1; p1=nullptr; delete p2; p2=nullptr; 返回0; }删除注释后,结果为b、b、和,触发动态绑定。

4、虚拟析构函数:由此可见,如果基类析构函数设置为非虚拟析构函数,则在尝试删除基类指针指向的派生类对象时,将调用基类析构函数而不调用派生类的析构函数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。