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

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

赞助商链接



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

***纯虚拟函数***

在计划抽象基类时,需求注意以下几点:

(1)不要将destructor 声明为pure virtual function;

假如将destructor声明为pure virtual function,则计划者一 定得定义它.因为每一个derived class destructor会被编译器加以扩大,以静态调用得方法调用其 “每一个virtual base class”以及“上一层base class”的 destructor.

(2)不要将那些函数定义内容并不与范例有关的函数计划为virtual function,因 为其几近不会被后继的derived class改写.

(3)关于其derived class大概改正某一个data member的函数,不该被声明为const.

***“无担当”情形下的对象构造***

先 定义class Point:

class Point {
public:
Point(float x = 0.0, float y = 0.0) : _x(x),_y(y) {}
virtual float z();
protected:
float _x,_y;
};

你可不能藐视z()这个virtual function给class Point带来的宏大改变.virtual function的引入促使每一个class Point拥有一个vtpr,这样一来,编译器在constructor中增添了对 vptr举行初始化的代码,而copy constructor和copy assignment operator也会对vptr举行设定,而不 再是原先简单的bitwise操作了.

请看以下的代码:

Point foobar()
{
Point local;
Point *heap = new Point;
*heap = local;
delete heap;
return local;
}

将被内部转化为:

Point foobar(Point &_result)
{
Point local;
local.Point::Point();
Point *heap = _new (sizeof(Point));
if(heap != 0)
heap->Point::Point();
*heap = local;
_result.Point::Point(local);  // copy constructor的利用
local.Point::~Point();
return;
}

从以上代码的转化可以看出:普通而言,假如你的计划之中有很多函 数都需求以传值方法(by value)传回一个local class object,那么供应一个copy constructor就比 较公道.

***担当体系下的对象构造***

假定class Point3d虚拟担当于class Point,但 由于class Point仅存在一份实体,因而class Point3d的constructor需求注意一个问题.

请看下面的担当关系图:

class Point3d : virtual public Point { ... };
class Vertex : virtual public Point { ... };
class Vertex3d : public Point3d, public Vertex { ... };


  以上是“《深度摸索C++对象模子》读书笔记(5)[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 .