分享
 
 
 

对象与数组

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

对象数组是指数组元素为对象的数组。该数组中若干个元素必须是同一个类的若干个对象。对象数组的定义、赋值和引用与普通数组一样,只是数组的元素与普通数组不同,它是同类的若干个对象。

1. 对象数组的定义

对象数组定义格式如下:

<类名><数组名>[<大小>]...

其中,<类名>指出该数组元素是属于该类的对象,方括号内的<大小>给出某一维的元素个数。一维对象数组只有一个方括号,二维对象数组要有两个方括号,等等,例如:

DATE dates[7];

表明dates是一维对象数组名,该数组有7个元素,每个元素都是类DATE的对象。

2. 对象数组的赋值

对象数组可以被赋初值,也可以被赋值。例如:

class DATE

{

public:

DATE(int m, int d, int y);

void printf();

private:

int month, day, year;

};

下面是定义对象数组并赋初值和赋值:

DATE dates[4]={ DATE(7, 7, 2001), DATE(7, 8, 2001), DATE(7, 9, 2001), DATE(7, 10, 2001) }

或者

dates[0] = DATE(7, 7, 2001);

dates[1] = DATE(7, 8, 2001);

dates[2] = DATE(7, 9, 2001);

dates[3] = DATE(7, 10, 2001);

指向数组的指针和指针数组

指向数组的指针和指针数组是两个完全不同的概念,现放在一起介绍是中为两者在定义格式相似,千万不要把它们搞混了。

1. 指向数组的指针

指向一般数组的指针定义格式如下:

<类型说明符>(*<指针名>)[<大小>]...

其中,用来说明指针的 * 要与<指针名>括在一起。后面用一个方括号表示该指针指向一维数组,后面用二个方括号表示该指针指向二维数组。<类型说明符>用来说明指针所指向的数组的元素的类型。例如:

int (*P)[3];

P是一个指向一维数组的指针,该数组有3个int型元素。

而指向对象数组的指针,则把<类型说明符>改为<类名>即可:

<类名>(*<指针名>)[<大小>]...

指向数组的指针的主要应用思想是:将数组的首地址(二维数组的某个行地址)赋给指针,然后通过循环(for)改变指针指向的地址,从而动态的访问数组中各个元素。

2. 指针数组

所谓指针数组指的是数组元素为指针的那类数组。一个数组的元素可以是指向同一类型的一般指针,也可以是指向同一类类型的对象。

一般指针数组的定义格式如下:

<类型名>*<数组名>[<大小>]...

其中,*加在<数组名>前面表示该数组为指针数组。[<大小>]表示某一维的大小,即该维的元素个数,…表示可以是多维指针数组,每一个[<大小>]表示一维。例如:

int * pa[3];

char * pc[2][5];

在C++编程中,经常使用char型的指针数组用来存放若干个字符串。下面是一个一维指针数组的例子。

#include <iostream.h>

#include <string.h>

const int N = 5;

void main()

{

char *strings[N]; //定义一个一维指针数组strings

char str[80];

cout<<"At each prompt, enter a string:\n";

for (int i=0; i<N; i++)

{

cout<<"Enter a string #"<<i<<":";

cin.getline(str, sizeof(str));

strings[i] = new char[strlen(str) + 1];

strcpy(strings[i], str);

}

cout<<endl;

for (i=0; i<N; i++)

cout<<"String #"<<i<<":"<<strings[i]<<endl;

}

对象指针数组的定义如下:

对象指针数组是指该数组的元素是指向对象的指针,它要求所有数组元素都是指向同一个类类型的对象的指针。格式如下:

<类名>*<数组名>[<大小>]...

它与前面讲过的一般的指针数组所不同的地方仅在于该数组一定是指向对象的指针。即指向对象的指针用来作该数组的元素。下面通过一个例子看一下对象指针数组的用法。

#include <iostream.h>

class A

{

public:

A(int i=0, int j=0) { a=i; b=j; }

void print();

private:

int a, b;

};

void A::print()

{

cout<<a<<","<<b<<endl;

}

void main()

{

A a1(7, 8), a2, a3(5, 7);

A *b[3] = { &a3, &a2, &a1 };

for (int i=0; i<3; i++)

b[i]->print();

}

带参数的main()参数

前面讲过的main()函数都是不带参数的。在实际编程中,有时需要main()带参数。通过main()函数的参数给程序增加一些处理信息。一般地说,当使用C++编写的源程序经过编译连接生成的可执行文件在执行时,需要还命令行参数,由该源程序的主函数main()就需要带参数。使用所还有的参数来存放命令行中的参数,以便在程序中对命令行参数进行处理。

带有参数的main()函数头格式如下:

void main(int argc, char * argv[])

其中,第一个参数argc是int型的,它用来存放命令行参数的个数,实际上argc所存放的数值比命令行参数的个数多1,即将命令字(可执行文件名)也计算在内。第二个参数argv是一个一维的一级指针数组,它是用来存放命令行中各个参数和命令字的字符串的,并且规定:

argv[0]存放命令字

argv[1]存放命令行中第一个参数

argv[2]存放命令行中第二个参数

这里,argc的值和argv[]各元素的值都是系统自动组赋值的。

在这里讲述带参数的main()函数实际上是对指针数组应用的一个具体实例。

#include <iostream.h>

void main(int argc, char *argv[])

{

cout<<"The number of command line arguments is:"<<argc<<endl;

cout<<"The program name is:"<<argv[0]<<endl;

if (argc>1)

{

cout<<"The command line arguments:\n";

for (int i=1; i<argc; i++)

cout<<argv[i]<<endl;

}

}

上述编译连接后的EXE文件,可在DOS命令行下调试。

关于命令行参数的使用,其基本方法是直接引用指针数组argv[]中某个元素所存放的字符串,可用下标方式,也可用指针方式。

2001-7-7 12:05

附带《C++面向对象基础教程》

文件下载: 点击下载 [114KB],[rar格式,下载 Winrar300sc ]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有