动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.c语言中时间陷阱的实现.
.理解C++语言的布尔类型和枚举类型.
.VC下调用ACM音频编程接口压缩Wav.
.从C++到Java --理解面向对象是关.
.如何将多个C语言模块组合成一个程.
.C语言入门之多维数组的指针变量.
.TDateTime.
.C++习题与解析(类和对象-02).
.C/C++中利用数组名/指针进行排序.
.GCC 安装.
.More Effective C++:类型转换.
.例程详析动态链接库.
.穷举算法解题的一般思路.
.栈的表示与实现及栈的应用.
.C语言教程第一章: C语言概论.
.怎样在程序中利用C++支持多国语言.
.学数学也要学点偷懒的技术(二).
.C语言初学者入门讲座 第十讲 函数.
.用快照枚举当前系统中所有进程.
.C语言初学者入门讲座 第八讲 转移.

C++ 对象的初始化

发表日期:2008-3-8 |


构造函数和析构函数

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

  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;

上一篇:在Win9x/NT下获取硬盘物理序列号 人气:816
下一篇:论C/C++函数间动态内存的传递 人气:662
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成