动态网站制作指南 [  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++教程 ]的信息

本月文章推荐
.对一个问题的突破!.
.用Win32 API枚举应用程序窗.
.C++习题与解析-类和对象.
.一个简单的焰火程序.
.关于如何在BCB中使用CodeGuard.
.C/C+语言struct深层探索.
.C语言程序设计经典实例之九.
.C语言的程序结构.
.经典:教你理解复杂的C/C++声明.
.C语言初学者入门讲座 第四讲 运算.
.谈谈代码风格──谈谈缩进.
.高质量C++/C编程指南(八).
.如何读写硬件端口.
.链表的C语言实现之单链表的插入运.
..
.C语言初级讲座之二.
.来研究一下yahoo的酷图幻灯js代码.
.Visual C++泛型编程实践.
.开机密码改进and带解释版.
.简单打飞碟游戏.

C++子对象和堆对象

发表日期:2008-3-8 |


  子对象

  当一个类的成员是某一个类的对象时,该对象就为子对象。子对象实际就是对象成员。如:

class A
{
 public:
  …
 private:
  …
};
class B
 {
  public:
   …
  private:
   A a;
   …
 };

  其中,B类中成员a就是子对象,它是A类的对象作为B类的成员。

  在类中出现了子对象或称对象成员时,该类的构造函数要包含对子对象的初始化,通常采用成员初始化表的方法来初始化子对象。在成员初始化表中包含对子对象的初始化和对类中其他成员的初始化。下面举一例子说明成员初始化的构造。

#include

class A
{
public:
A(int i, int j) { A1=i; A2=j; }
void print() { cout< private:
int A1, A2;
};

class B
{
public:
B(int i, int j, int k):a(i, j), b(k)
{
}
void print();
private:
A a; file://子对象
int b;
};

void B::print()
{
a.print();
cout< }

void main()
{
B b(6, 7, 8);
b.print();
}

  该程序的输出结果为:

  6,7
  8

  其中,a(i, j), b(k)是成员初始化表,它有二项,前一项是给子对象a初始化,其格式如下:

   <子对象名> (<参数表>)

  后一项是给类B的数据成员b初始化。这一项也可以写在构造函数的函数体内,使用赋值表达式语句

   b = k;

  给类B的数据成员初始化。 更多文章 更多内容请看C/C++技术专题专题,或
  堆对象

  所谓堆对象是指在程序运行过程中根据需要随时可以建立或删除的对象。这种堆对象被创建在内存一些空闲的存储单元中,这些存储单元被称为堆。它们可以被创建的堆对象占有,也可以通过删除堆对象而获得释放。

  创建或删除堆对象时,需要如下两个运算符:

   new

   delete

  这两个运算符又称为动态分配内存空间运算符。new相当于C语言中malloc()函数,而delete相当于C语言中free()函数。

  1. 运算符new的用法

  该运算符的功能是用来创建堆对象,或者说,它是用来动态地创建对象。

  new运算符使用格式如下:

  new <类型说明符> (<初始值列表>)

  它表明在堆中建立一个由<类型说明符>给定的类型的对象,并且由括号中的<初始值列表>给出被创建对象的初始值。假如省去括号和括号中的初始值,则被创建的对象选用缺省值。

  使用new运算符创建对象时,它可以根据其参数来选择适当的构造函数,它不用sizeof来计算对象所占的字节数,而可以计算其大小。

  new运算符返回一个指针,指针类型将与new所分配对象相匹配,假如不匹配可以通过强制类型的方法,否则将出现编译错。

  假如new运算符不能分配到所需要的内存,它将返回0,这时的指针为空指针。

  运算符new也可以用来创建数组类型的对象,即对象数组。其格式如下:

   new <类名> [<算术表达式>]

  其中,<算术表达式>的值为所创建的对象数组的大小。如:

   A *ptr;
   ptr = new A[5];

  new还可用来创建一般类型的数组。如:

   int *p;
   p = new int[10];

  使用new[]创建的对象数组或一般数组时,不能为该数组指定初始值,其初始值为缺省值。

  2. 运算符delete的用法

  该运算符的功能是用来删除使用new创建的对象或一般类型的指针。其格式如下:

   delete <指针名>

  例如:

   A *ptr;
   ptr = new A(5, 6);
   delete ptr;

  运算符delete也可用来删除使用new创建对象数组,其使用格式如下:

   delete[] <指针名>

  同样,delete也可以删除由new创建的一般类型的数组。如:

   int *p;
   p = new int[10];
   delete[] p;

  使用运算符delete时,应注重如下几点:

   (1) 它必须使用于由运算符new返回的指针;

   (2) 该运算符也适用于空指针(即其值为0的指针);

   (3) 指针名前只用一对方括号符,并且不管所删除数组的维数,忽略方括号内的任何数字。

  下面举一例子说明new运算符和delete运算符的使用方法。


#include

class AA
{
public:
AA(int i, int j)
{
A=i; B=j;
cout<<"构造函数.\n";
}
~AA() { cout<<"析构函数.\n"; }
void print();
private:
int A, B;
};

void AA::print()
{
cout< }

void main()
{
AA *a1, *a2;
a1 = new AA(1, 2);
a2 = new AA(5, 6);
a1->print();
a2->print();
delete a1;
delete a2;
}

   该程序的输出结果为:

    构造函数.
    构造函数.
    1, 2
    5, 6
    构造函数.
    构造函数.

  从程序中可以看到:用new创建对象时,要调用构造函数,用delete删除对象时,要调用析构函数。假如创建或删除的时对象数组,对象数组有多少,就调用多少次构造函数或构造函数。

  在实际应用中,经常对于new运算符返回的指针进行检验,看是否分配了有效的内存空间。结合本例给出检验方法如下:

  if (!a1)
   {
    cout<<"Heap erroe!\n";
    exit(1);
   }

  下面再举一个使用new和delete运算符对一般指针和数组的例子。

#include
#include

void fun()
{
int *p;
if (p = new int)
{
*p = 5;
cout<<*p< delete p;
}
else
cout<<"Heap error!\n";
}

void main()
{
fun();
int *pa;
pa = new int[5];
if (!pa)
{
cout<<"Heap error!\n";
exit(1);
}
for (int i=0; i<5; i++)
pa[i] = i+1;
for (i=0; i<5; i++)
cout<<pa[i]<<" ";
cout< delete[] pa;
}
更多文章 更多内容请看C/C++技术专题专题,或
上一篇:链表的C语言实现之单链表的插入运算 人气:398
下一篇:为C++程序添加文件保存加载功能 人气:560
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 HDWiki v4.0.1 bulid 081007 UTF
2008-10-7 迅易评选投票管理系统 v10.0
2008-10-7 HDWiki v4.0.1 bulid 081007 GBK
2008-10-7 Bitrac单用户博客 v1.14 bulid 0
2008-10-7 OpenX(广告管理系统) v2.6.2 多国
2008-10-7 乐铺网店系统免费普及版 v3.41
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | 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対策 中国語教室 ホームページ作成