设为首页  加入收藏  联系我们 繁體中文  

黑客软件:

  漏洞扫描 | 木马间谍 | 加密解密 | 远程控制 | 破坏攻击 | 杀毒软件 | 防火墙类 | OICQ专区 | 黑客必备 | 常用工具 | 网吧攻击
文章中心:   最新资讯 | 黑客技术 | 电脑基础 | 菜鸟文摘 | 网络安全 | 网络技巧 | QQ技巧 | OQ空间代码 | 免费资源 | 编程世界 | 建站技术
素材源码:   论坛相关 | ASP源码 | CGI 源码 | NET 源码 | PHP 源码 | 酷站素材 | 字体素材 | 图片素材 | 友情发布 | 网页模版 | 建站软件
教程动画:   黑客教程 | 黑客编程 | 网站入侵 | 菜鸟教程 | 入侵教程 | 破解教程 | 电子书籍 | 网页制作 | 高级会员 | 综合教程 | 本站原创


   

  您当前的位置:中华隐士黑客联盟 -> 编程世界 -> VCC文章 -> 文章内容 [站内搜索]  

 
C++ 对象的初始化
作者:不详  来源:转载  发布时间:2006-12-12 15:28:36  发布人:heigeheapao
C++ 对象的初始化
构造函数和析构函数

  构造函数和析构函数是在类体中说明的两种特殊的成员函数。构造函数的功能是在创建对象时,使用给定的值来将对象初化。析构函数的功能是用来释放一个对象的,在对象删除前,用它来做一些清理工作,它与构造函数的功能正好相反。下面举一例子来说明构造函数和析构函数的特点:

  class TDate
  {
    public:
    TDate(int y, int m, int d);
    ~TDate();
    int IsLeapYear();
    void Print();
  private:
    int year, month, day;
  };

  //类的实现部分
  TDate::TDate(int y, int m, int d)
  {
    year = y;
    month = m;
    day = d;
  cout<<"构造函数已被调用。\n";
  }

  TDate::~TDate()
  {
    cout<<"析构函数被调用。\n";
  }

  int TDate::IsLeapYear()
  {
    return(year%4==0 && year%100!=0) || (year%400==0);
  }

  void TDate::Print()
  {
    cout<
  }

  类体内说明的函数TDate()是构造函数,而~Tdate()是析构函数。构造函数的特点如下:

  1、构造函数是成员函数,函数体可写在类体内,也可定在类体外。

  2、构造函数是一个特殊的函数,该函数的名字与类名相同,该函数不指定类型说明,它有隐含的返回值,该值由系统内部使用。该函数可以一个参数,也可以有多个参数。

  3、构造函数可以重载,即可以定义多个参数个数不同的函数。

  4、程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。

  析构函数的特点如下:

  1、析构函数是成员函数,函数体可写在类体内,也可定在类体外。

  2、析构函数也是一个特殊的函数,它的名字同类名,并在前面加“~”字符,用来与构造函数加以区别。析构函数不指定数据类型,并且也没有参数。

  3、一个类中只可能定义一个析构函数。

  4、析构函数可以被调用,也可以系统调用。在下面两种情况下,析构函数会被自动调用。

  ·如果一个对象被定义在一个函数体内,则当这个函数结束时,该对象的析构函数被自动调用。

  ·当一个对象是使用new运算符被动态创建的,在使用delete运算符释放它时,delete将会自动调用析构函数。

  下面用一程序说明构造函数和析构函数的应用:

  #include
  #include
  #include "tdate.h"    //类的定义存放在该文件中

  void main()
  {
  TDate today(1998, 4, 9), tomorrow(1998, 4, 10);
  cout<<"Today is:";
  today.Print();
  cout<<"Tomorrow is:";
  tomorrow.Print();
  getch();
  }

  读者可以自行调试该程序,并分析其结果。要在VC环境下调试该程序,要对程序进行一些参数设置,否则无法正常运行(主要是去掉MFC的支持——该程序无需MFC的支持)。

  缺省构造函数和缺省析构函数

  在类定义时没有定义任何构造函数时,则编译器自动生成一个不带参数的缺省构造函数,其格式如下:

  <类名>::<缺省构造函数名>()
  {
  }

  按构造函数的规定,缺省构造函数名同类名。缺省构造函数的这样格式也可由程序员定义在类体中。在程序中定义一个对象而没有指明初始化时,则编译器便按缺省构造函数来初始化该对象。用缺省构造函数对对象初始化时,则将对象的所有数据成员都初始化为零或空。

  同理,如果一个类中没有定义析构函数时,则编译系统也生成一个称为缺省析构函数数,其格式如下:

  <类名>::~<缺省析构函数名>
  {
  }

  <缺省析构函数名>即为该类的类名。缺省析构函数是一个空函数

拷贝初始化构造函数

  拷贝初始化构造函数是一种特殊的成员函数,它的功能是用一个已知的对象来初始化一个被创建的同类的对象。拷贝初始化构造函数实际上也是构造函数,它是在初始化时被调用来将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。

  拷贝衩始化构造函数的特点如下:

  1、该函数名同类名,因为它也是一种构造函数,并且该函数也不被指定返回类型。

  2、该函数只有一个参数,并且是对某个对象的引用。

  3、每个类都必须有一个拷贝初始化构造函数,其格式如下:

  <类名>::<拷贝初始化构造函数名>(const<类名>&<引用名>)

       其中,<拷贝初始化构造函数名>是与该类名相同的。const是一个类型修饰符,被它修饰的对象是一个不能被更新的常量。

  如果类中没有说明拷贝初始化构造函数,则编译系统自动生成一个具有上术形式的缺省拷贝初始化构造函数。作为该类的公有成员。

  下面举一例子说明拷贝初始化构造函数

  class TPoint
  {
    public:
    TPoint(int x, int y) {X=x; Y=y;}
     TPoint(TPoint & p);
    ~TPoint() {cout<<"析构函数被调用。\n";}
    int Xcoord() {return X;}
    int Ycoord() {return Y;}
    private:
    int X, Y;
  };

  TPoint::TPoint(TPoint & p)
  {
    X = p.X;
    Y = p.Y;
    cout<<"拷贝初始化构造 函数被调用。\n";
  }

  #include
  void main()
  {
  TPoint P1(5, 7);
  TPoint P2(P1);
  cout<<"P2="<
  }

  该程序的输出结果为:

  拷贝初始化构造函数被调用。
  P2=5,7
  析构函数被调用。
  析构函数被调用。

  关于拷贝初始化构造函数的其他用法,可从下例看出:

  #include
  #include "tpont.h"    //类的定义放于该文件中
  TPoint f(TPoint Q);
  void main()
  {
  TPoint M(20, 35),P(0, 0);
  TPoint N(M);
  P = f(N);
  cout<<"P="<
  }

  TPoint f(TPoint Q)
  {
  cout<<"ok\n";
  int x, y;
  X = Q.Xcoord()+10;
  Y = Q.Ycoord()+20;
  TPoint R(x, y);
  return R;
  }

  请大家自行调试该程序,并分析其结果。

  总结:拷贝初始化构造函数的功能就是用一个已知的对象来初始化另一个对象。在下述三种情况下,需要用拷贝初始化构造函数来用一个对象初始化另一个对象。

  1、明确表示由一个对象初始化另一个对象时,如:TPoint P2(P1);

  2、当对象作为函数实参传递给函数形参时,如:上例 P = f(N);

  3、当对象用为函数返回值时,如:上例 return R;
[] [返回上一页] [打 印] [收 藏]
  [相关文章评论]    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
 

  Symantec 宣称要给I..
智能布线系统AMPTRA..
Symantec Reporting..
苹果发布17个Mac OS..
Symantec Norton Gh..
Cisco NFC 默认用户..
DNS RPC 分析
Mac OS存在严重安全..
"黑客"无法攻破Mac ..
Symantec Norton个人..


 
免费获得Q币的最新方法
最新免费在线看的电影网站集绵
不用木马,轻松万能偷daoQQ号码
最新QQ空间4.0全屏版效果图!!
新免蟆Q秀,刷红钻的方法
黑客快速入门(强烈推荐)
QQ密码本地破解的原理和方法
18岁少女欲6000元卖处女身 救患血..
8款QQ空间免费开场动画
免费QQ蓝钻体验(附考试答案)
 
设置Web邮箱黑客警报器 防止财务.. 04-11
二行代码解决全部网页木马(含ifr.. 04-11
防止黑客根据PHP中的错误信息爆路.. 04-11
webshell下查找所有IIS站点配置... 04-11
终级win2003服务器安全配置篇! 04-11
解决“网际快车”和“迅雷”右键.. 04-11
英国电信(BT)被指监视36000余名互.. 04-11
用命令行开启或关闭 IP 安全策略.. 04-11
Firefox2狂占CPU解决办法 04-11
大水牛下载者手工清除的方法 04-11
 
关于本站 网站帮助 广告合作 下载声明 友情连接 网站地图 访客留言 论坛登录
〖中华隐士黑客联盟〗,Copyright © 2006-2010 WwW.Hack86.Com 闽ICP备:06023304号
站长:小质 QQ:771760,软件发布MAIL:Hack086@21cn.com