CPP学习之——静态联编(13.5-6)

一 概述

静态联编分为:编译时静态联编和运行时静态联编

二 编译时静态联编

2.1 理论

  • 静态联编是指联编工作出现在编译连接阶段,这种联编又称早期联编,它解决了程序中的操作调用与执行该操作代码间的关系。
  • 在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系。
  • 对于静态联编来说,由于它已经确定了调用与被调用的关系,因此代码在编译时与执行时的效果都是一样的

2.2 示例演示及结果输出

2.2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
class A
{
public:int get(){return 1;}
};
class B:public A
{
public:int get(){return 2;}
};
int main()
{
A a;
int one;
one=a.get();
cout<<"a的值是:"<<one<<endl;
B b;
one=b.get();
cout<<"b的值是:"<<one<<endl;
return 0;
}

2.2.2 输出结果

1
2
a的值是:1
b的值是:2

三 运行时静态联编

3.1 理论

接着我们再看一下运行时的效果,假设我们用指针再运行时再动态地指向某个对象,然后再用该对象调用它的成员函数,由于静态联编的对象与指针的关系在编译时就已确定,所以运行时再想对它改变也是无效的

3.2 示例演示及结果输出

3.2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
using namespace std;
class A
{
public:int get() {return 1;}
};
class B: public A
{
public:int get() {return 2;}
};
int main()
{
while (true)
{
cout << "(1)父类(2)子类(3)退出:";
int choice;
cin >> choice;
A *p;
bool quit = false;
switch (choice)
{
case 1:
p = new A;
break;
case 2:
p=new B;
break;
case 3:
quit=true;
break;
default:
cout<<"请输入1 、2或者3.";
break;
}
if(quit==true){break;}
cout<<p->get()<<endl;
}
return 0;
}

3.3.2 输出结果

1
2
3
4
5
6
7
(1)父类(2)子类(3)退出:1
1
(1)父类(2)子类(3)退出:2
1
(1)父类(2)子类(3)退出:4
请输入1 、2或者3.1
(1)父类(2)子类(3)退出:3