有谁知道那几个 【 ?】 处写什么,谁能帮忙回答一下,实在是不知道该写什么
int commonDividor(int x,int y);
commonDividor(data1,data2)
int
int x
int y
y
k = x
&&
k
在C++语言中,如果某个类有虚函数,那么大多数编译器都会自动的为其对象维护一个隐藏的“虚指针(virtul-pointer)”,虚指针指向一个全局“虚表(virtual-table)”,虚表中存放若干函数指针,这些函数指针指向类中的虚函数。请看下面这段C++语言代码:
class A {
public:
virtual void vfoo1();
virtual void vfoo2();
void foo1();
void foo2();
private:
int prv_i1, prv_i2;
};
显然,类 A 有两个常规函数以及两个 int 型的成员变量,此外,它还有两个虚函数,因此编译器会创建一个虚表,虚表中存放的是函数指针,它们分别指向类 A 的虚函数,如下图所示:
这里应注意,虚表是属于类的,而不是对象的,也就是说,即使有成千上万个 A 对象,虚表也仅有一个,这些对象共用一个类虚表。编译器会自动的为每个对象创建一个隐藏的“虚指针”__vptr,它指向类 A 的虚表,如下图所示:
C++语言这样实现虚函数机制的空间开销是微乎其微的,事实上,每一个对象只需要一个额外的“虚指针”__vptr就能够调用类的虚函数。同样的,时间开销也很小:相比于常规函数的调用,虚函数的调用只不过多出了额外的两个步骤:
获取虚表指针,得到虚表。从虚表中取出虚函数的地址
读者应注意,这里的讨论为了突出主题,理想化了一些情况。