当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

《深度摸索C++对象模子》读书笔记(4)[VC/C++编程]

赞助商链接



  本文“《深度摸索C++对象模子》读书笔记(4)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

***非静态成员函数(Nonstatic Member Functions)***

C++的计划原则之一就是: nonstatic member function至少必须和普通的nonmember function有相同的效率.也就是说,假如我们 要在以下两个函数之间作挑选:

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

那么挑选member function不该该带来 什么额外负担.因为编译器内部已将“member函数实体”转化为对等的“nonmember函 数实体”.下面是magnitude()的一个nonmember定义:

float Pointer3d::magnitude() const
{
return sqrt(_x*_x + _y*_y + _z*_z);
}
// 内部转化为
float magnitude_7Point3dFv(const Point3d *this)  //已对函数名称举行 “mangling”处理
{
return sqrt(this->_x*this->_x + this- >_y*this->_y + this->_z*this->_z);
}

目前,对该函数的每一个调 用操作也都必须转换:

obj.magnitude();
// 转换为
magnitude_7Point3dFv (&obj);

关于class中的memeber,只需在member的名称中加上class名称,便可形成 举世无双的命名.但由于member function可以被重载化,所以需求更遍及的mangling伎俩,以供应绝对 举世无双的名称.此中一种做法就是将它们的参数链表中各参数的范例也编码进去.

class Point {
public:
void x(float newX);
float x();
...
};
// 内部转化为
class Point {
void x_5PointFf(float newX);  // F表示function,f表示其第一个参数范例是float
float x_5PointFv();  // v表示其没有参数
};

上述的mangling伎俩可在链接期间查抄出任何不精确的调用操作,但由于编码 时未考虑返回范例,故假如返回范例声明错误,就无法查抄出来.

***虚拟成员函数(Virtual Member Functions)***

关于那些不支持多态的对象,经过一个class object调用一个virtual function,这种操作应当老是被编译器像对待普通的nonstatic member function一样地加以抉择:

// Point3d obj
obj.normalize();
// 不会转化为
(*obj.vptr[1]) (&obj);
// 而会被转化未
normalize_7Point3dFv(&obj);

***静态 成员函数(Static Member Functions)***

在引入static member functions之前,C++要求全部 的member functions都必须经过该class的object来调用.而实际上,假如没有任何一个nonstatic data members被直接存取,事实上就没有必要通过一个class object来调用一个member function.这样一来便 产生了一个冲突:一方面,将static data member声明为nonpublic是一种好的习惯,但这也要求其必须 供应一个或多个member functions来存取该member;另一方面,固然你可以不靠class object来存取一 个static member,但其存取函数却得绑定于class object之上.

static member functions恰是 在这种情形下应运而生的.


  以上是“《深度摸索C++对象模子》读书笔记(4)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 《深度摸索C++对象模子》读书笔记(1)
  • 《深度摸索C++对象模子》读书笔记(2)
  • <b>《深度摸索C++对象模子》读书笔记(3)</b>
  • 《深度摸索C++对象模子》读书笔记(4)
  • 《深度摸索C++对象模子》读书笔记(5)
  • 《深度摸索C++对象模子》读书笔记(6)
  • <b>《深度摸索C++对象模子》读书笔记(7)</b>
  • <b>《深度摸索C++对象模子》读书笔记 最后一记</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .