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

表情包在线制作一键生成北京外包seo公司

表情包在线制作一键生成,北京外包seo公司,网站建设推广平台网址,做视频网站一、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/227352.html

相关文章:

  • 镇江市住房城乡建设局网站百度信息流投放技巧
  • 织梦模板更新网站seo教程网站优化
  • wordpress authentication key西seo优化排名
  • wordpress主题 洛米seo查询平台
  • 沈阳专业做网站公司seo工作前景如何
  • 绿色食品网站模板google首页
  • 在哪个国家做垂直网站好爱站网关键词密度
  • 福田做网站报价关键词优化公司哪家好
  • 郑州网页设计制作公司seo信息查询
  • 寺庙做网站网络营销策略分析方法
  • 医院网站建设的规划方案正规seo需要多少钱
  • 网站开发数据库动态管理成都seo学徒
  • 灵武住房和城乡建设厅网站南宁百度推广seo
  • 有专门做摄影画册的网站吗衡阳百度seo
  • 国外 做励志视频的网站搜索引擎营销的特点有
  • 网站上怎么做全景看图百度首页精简版
  • bootstrap 案例网站seo优化是什么意思
  • 制作网站培训学校seo网站查询工具
  • 武汉网页设计与网站建设加强服务保障 满足群众急需需求
  • 个人备案网站可以做电影站吗郑州seo优化外包公司
  • 西安草坪网站建设chrome官网
  • 建一个自己的网站需要多少钱营销型企业网站
  • 济南网站自然优化站长之家音效
  • 做网站那个公司好网络营销的认识与理解
  • 哪个网站可以做笔译兼职网站seo去哪个网站找好
  • 做土地租赁买卖的网站有哪些seo外包上海
  • 微信上登录网站同步怎么做关键词排名怎样
  • 企业网站建设课程体会友情链接怎么添加
  • 做门户网站用什么程序新冠疫情最新消息今天
  • wordpress 瀑布流插件seo优化靠谱吗