C++ 如何一个程序来区分静态连编和动态连编
答案:1 悬赏:0 手机版
解决时间 2021-03-07 00:37
- 提问者网友:你挡着我发光了
- 2021-03-06 04:25
有人能拿 2个简单的程序对比下吗? 谢谢了
最佳答案
- 五星知识达人网友:迷人又混蛋
- 2021-03-06 05:24
如果没记错的话,有一种纯虚基类,是这样的:
class c1
{
public:
virtual int f1()=0;
};
这样的类不能直接生成对象,只能被继承。但是类里面就含有f1这个函数。
class c2:public c1
{
public:
int f1()
{
return 0;
}
};
class c3:public c1
{
public:
int f1()
{
return 1;
}
};
这样就有了一个c1的子类c2、c3实现了虚函数 f1()的,可以直接生成对象。
那么,如果使用c1类的指针指向c2和c3,就可以分别调用c2:f1()和c3:fq()。
那么,如果有如下程序段:
c1* a;
c2 C2;
c3 C3;
int b;
cin>>b;
if(b==0)
{
a=&C2;
}
else
{
a=&C3;
}
cout<<a->f1();
那么,运行的结果是什么呢?显然要在运行时才能确定。这就是动态联编,在程序里都有动态联编的查找表。除此以外任何的多态都时静态,聪明的62616964757a686964616fe58685e5aeb931333262353366编译器都是直接的调用相关的函数。这里有几个条件:纯虚基类,继承,纯虚基类的指针指向继承的类成员,调用纯虚基类的虚函数。于是这样就会引起编译器无法判断运行时应该调用哪个函数,只好使用动态联编的方法,在运行的时候由程序自行决定。
class c1
{
public:
virtual int f1()=0;
};
这样的类不能直接生成对象,只能被继承。但是类里面就含有f1这个函数。
class c2:public c1
{
public:
int f1()
{
return 0;
}
};
class c3:public c1
{
public:
int f1()
{
return 1;
}
};
这样就有了一个c1的子类c2、c3实现了虚函数 f1()的,可以直接生成对象。
那么,如果使用c1类的指针指向c2和c3,就可以分别调用c2:f1()和c3:fq()。
那么,如果有如下程序段:
c1* a;
c2 C2;
c3 C3;
int b;
cin>>b;
if(b==0)
{
a=&C2;
}
else
{
a=&C3;
}
cout<<a->f1();
那么,运行的结果是什么呢?显然要在运行时才能确定。这就是动态联编,在程序里都有动态联编的查找表。除此以外任何的多态都时静态,聪明的62616964757a686964616fe58685e5aeb931333262353366编译器都是直接的调用相关的函数。这里有几个条件:纯虚基类,继承,纯虚基类的指针指向继承的类成员,调用纯虚基类的虚函数。于是这样就会引起编译器无法判断运行时应该调用哪个函数,只好使用动态联编的方法,在运行的时候由程序自行决定。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯