c++让人迷惑的动静态连编

c++的动静态连编

想必大家遇到c++面向对象中的动静态连编,都会发蒙。在这里插入图片描述
但是,不要怕,看我给你讲解。
首先,要理解连编的意义

连编:将模块或函数合并生成可执行代码的处理过程,让程序知道你是要调用哪个函数(不要忘了函数重载)
然后,连编又按不同的进行阶段分为动态连编静态连编

静态连编:编译阶段就将函数实现与函数调用关联起来;
动态连编:在程序执行阶段才将函数实现和调用关联;

注:应为C语言不支持函数重载所以都是静态连编

看到这里,你肯定想问。能不能举个栗子呢?
答:当然可以
静态连编:

#include<iostream>
using namespace std;

class base_c{
public:
    base_c(){
    	cout<<"new a base_c"<<endl;
    }
    void function(){
    	cout<<"a function of base_c"<<endl;
    }
    ~base_c(){
    	cout<<"base_c is died"<<endl;
    }
};
int main(int argc,char* argv[]){
    base_c baseC;
    baseC.function();
    return 0;
}

结果:
在这里插入图片描述

这个在编译期就指定了function()是访问base::function
动态连编:

#include<iostream>
using namespace std;

class base_c{
public:
    base_c(){
        cout<<"new a base_c"<<endl;
    }
    virtual void function(){
        cout<<"a function of base_c"<<endl;
    }
    virtual ~base_c(){
        cout<<"base_c is died"<<endl;
    }
};
class sub_c:public base_c{
public:
    sub_c():base_c(){
        cout<<"new a sub_c"<<endl;
    }
    void function(){
        cout<<"a function of sub_c"<<endl;
    }
    ~sub_c(){
        cout<<"sub_c is died"<<endl;
    }
};
int main(int argc,char* argv[]){
    base_c* p;
    int index;
    cin>>index;
    switch(index){
        case 1:
            p = new base_c;
            break;
        case 2:
            p = new sub_c;
            break;
    }
    p->function();
    delete p;
    return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述
所以,你学废了么?学废了的点个赞,没学废的扣眼珠子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值