您的位置:首页 > 编程语言 > C语言/C++

Function语意学 Member的各种调用方式

2015-10-29 20:33 483 查看

Nonstatic Member Functions

nonstatic member functions和一般的nonmember function有相同的效率。也就是说下边两种函数效率相差不多。

float func(const ClassA *this){...}//nonmember function
float ClassA::func() const{...}//nonstatic member functions


因为member function将会编译器被转化为nonmember形式,按以下步骤:

①添加额外参数中添加this指针。

②将对nonstatic data member的存取操作改为由this来存取

③把member function重写为外部函数,函数名称将会修改。

例子:

float ClassA::func(){
return _x + _y;
}
//被改写成类似这样⬇️
float func_ClassA(ClassA *this){//被修改的函数名在不同编译器中有不同策略,不过对编程来说影响不大,想要了解命名策略可以上网查找。
return this->_x + this->_y;
}
//所以:

ClassA obj;
ClassA *ptr = &obj;
obj.func();
ptr->func();
//两种调用方式的效率应该一样,被转化为:

func_ClassA(&obj);
func_ClassA(ptr);


Virtual Member Functions

如果virtualFunc();是一个virtual member function,那么:

ptr->virtualFunc();
//将会转化为:
(* ptr->vptr[1] )( ptr );
//vptr是指向virtual table的指针;
//1是virtual table slot的索引值;
//第二个ptr表示this指针;


Static Member Functions

如果staticFunc();是一个Static Member Functions,那么

obj.staticFunc();
ptr->staticFunc();
//被转化为
staticFunc_ClassA();//由编译器将函数名改写。并被提出于class声明之外
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++