当前位置: 首页 > wzjs >正文

手机建网站 教程百度推广渠道商

手机建网站 教程,百度推广渠道商,asp网站制作教程,成都企业展厅设计成都企业展厅设计公司一、Nonstatic member functions C 的设计准则之一就是:nonstatic member function 至少必须和一般的nonmember function 有相同的效率。也就是说,如果我们要在以下两个函数之间作选择: float magnitude3d( const Point3d * this ) { ... } float Point3d::magnit…

一、Nonstatic member functions

C++ 的设计准则之一就是:nonstatic member function 至少必须和一般的nonmember function 有相同的效率。也就是说,如果我们要在以下两个函数之间作选择:

float magnitude3d( const Point3d * this ) { ... }
float Point3d::magnitude3d() const { ... }

那么选择 member function 不应该带来什么额外负担。这是因为编译器内部已将member 函数实体”转换为对等的“nonmember 函数实体。转化步骤:

1.引入形参this

// non-const nonstatic member 之增长过程Point3d
Point3d::magnitude( Point3d *const this )

2.对nonstatic data member 的存取操作改成经由this

return sqrt(this->_x * this->_x + this->_y * this->_y + this->_z * this->_z);

3.将此member function 通过 mangling 改名

extern magnitude_7Point3dFv(register Point3d *const this );

现在这个函数已经被转换好了,而其每一个调用操作也都必须转换。于是:

obj .magnitude () ;
// 变成了:
magnitude_7point3dFv( &obj );

二、Virtual member functions

如果 normalize()是一个 virtual member function,那么以下的调用将会被内部转化为:

ptr->normalize();
// 
( * ptr->vptr[ 1 ])( ptr );

其中:

  • vptr 表示由编译器产生的指针,指向 virtual table,它被安插在每一个“声明有(或继承自)一个或多个 virtual functions”的 class object 中。

  • 1 是 virtual table slot 的索引值,关联到 normalize()函数。

  • 第二个 ptr 表示 this 指针。

对于以下调用:

// Point3d obj;
obj.normalize();

如果编译器把它转换为:

( * obj->vptr[ 1 ])( &obj );

可以,却没有必要。应该像对待nonstatic member function 一样加以决议:

normalize_7Point3dFv( &obj );

三、Static Member Functions

编译器处理起来就和一个nonmember function一样

然后简单介绍了为什么会出现Static Member Functions。

首先,对于member data的存取,编译器需要走this指针;

其次, static 数据不是存放在类对象中,所以存取数据可以不走 this 指针;

而 static 一般建议使用 nopublic 的方式来声明,并通过一些public的function来存取,这样我们可以避免对象的生成,直接通过类静态函数进行访问。所以会出现下面这种存取方式:

(( Point3d* ) 0 )->object_count();

至于语言层面上的解决之道,是由 cfront 2.0所引人的 static memberfunctions。Static member functions 的主要特性就是它没有 this 指针。以下的次要特性统统根源于其主要特性:

  • 它不能够直接存取其 class 中的 nonstatic members.

  • 它不能够被声明为 const、volatile 或 virtual。

  • 它不需要经由 class obiect 才被调用---虽然大部分时候它是这样被调用的!

如果取一个 static member function 的地址,获得的将是其在内存中的位置也就是其地址。由于 static member function 没有 this 指针,所以其地址的类型并不是一个“指向 class member function 的指针”,而是一个“nonmember 函数指针”。也就是说:

&Point3d::object count();
会得到一个数值,类型是:
unsigned int (*)();
而不是:
unsigned int ( Point3d::* )();

http://www.dtcms.com/wzjs/253359.html

相关文章:

  • 合肥市建设行政主管部门网站百度云搜索引擎入口 百度网盘
  • 怎样维护网站的安全和备份放单平台大全app
  • 给个网站靠谱点2021杭州网站外包
  • 芜湖企业网站建设网络营销推广方案案例
  • 做团购的家居网站有哪些爱战网关键词查询网站
  • 网站开发项目安排宁波seo外包服务商
  • 网站里面网友点评怎么做uc信息流广告投放
  • 哪个网站适合 做红本抵押口碑营销有哪些方式
  • 用dw制作视频网站网络安全培训
  • 湖南省建设厅官方网站官网网站seo分析报告
  • 网站怎么做架构图站内搜索引擎
  • 用阿里云怎么建网站成品短视频网站源码搭建
  • 用ps怎么做网站的效果图高端网站公司
  • 买域名去哪个网站推广普通话ppt课件
  • 数字货币网站开发深圳百度总部
  • 做同城信息类网站如何赚钱百度指数官网查询
  • 专业做网站优化软文推广什么意思
  • 做外汇 虚拟网站客户管理软件crm排名
  • 网站做适配seo优化教程视频
  • 荔湾区建网站公司淘宝店铺买卖交易平台
  • 葫芦岛住房和城乡建设委员会网站郑州众志seo
  • vs做网站示例seo门户网价格是多少钱
  • 网站专题页怎么做搜外seo
  • 自己接单做网站在线种子资源网
  • 单位不能建设网站数字化营销
  • 凡科网站做网站多少钱营销广告
  • 门窗专业设计网站沈阳网站关键词优化多少钱
  • 手机网站备案密码找回的方法博客推广工具
  • 做网站的人会不会拿走我的网站在线优化工具
  • 小制作四年级长沙网站推广seo