| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 368 人关注过本帖
标题:【大家好】程序中有一部分 我实在想不明白【定义对象和初始化和一合并?】
只看楼主 加入收藏
JackyZhang
Rank: 2
等 级:论坛游民
帖 子:82
专家分:29
注 册:2010-7-12
结帖率:60%
收藏
已结贴  问题点数:0 回复次数:3 
【大家好】程序中有一部分 我实在想不明白【定义对象和初始化和一合并?】
程序代码:
#include<iostream>
using namespace std;
//定义类
class Arr
{
    int m;  //数组实际元素个数
    int a[100];
public:
    Arr(int x[],int size)//构造函数,用size始化m,用参数x初始化数组a
    {
        m=size;
        for(int i=0;i<m;i++)
            a[i]=x[i];
    }

    void delsame();

    void show()
    {
        for(int i=0;i<m;i++)
        {
            cout<<a[i]<<"\t";
            if((i+1)%5==0)
                cout<<endl;
        }
        cout<<endl;
    }
};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
//定义类内函数delsame()
void Arr::delsame()//删除重复数据
{
    int i,j;
    for(i=0;i<m-1;i++)
    {
        if(a[i]==a[i+1])
        {
            for(j=i+1;j<m-1;j++)
            {
                a[j]=a[j+1];
            }
            m--;//删除一个数据后元素个数减一
            i--;//可能出现连续多个相同的数,so 继续判断当前元素
        }                                                                                                                    
    }
}
//主函数
int main()
{
    int b[16]={1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10};
    Arr v(b,sizeof(b)/sizeof(b[0]));//此行我想不懂
    v.show();//显示原数组
    v.delsame();
    v.show();//显示结果数组
    return 0;
}


我想问的有两点:(1)关于sizeof,我记得sizeof(数组)得到的是数组中的元素个数,而b数组中的元素个数是已知的,是不是可能这样做:Arr v(b,16);
(2)Arr是类也是构造函数,从程序中可以看出v是定义的对象了,那为什么可以这样定义 Arr v(b,sizeof(b)/sizeof(b[0]));难道Arr在此处可以初始化,还可以定义对象吗?C++中有这种语法吗?
搜索更多相关主题的帖子: 元素 
2011-04-29 08:11
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:10 
1)关于sizeof,我记得sizeof(数组)得到的是数组中的元素个数,而b数组中的元素个数是已知的,是不是可能这样做:Arr v(b,16);
sizeof(数组不是求元素个数,是得到数据所占有的字节数)


(2)Arr是类也是构造函数,从程序中可以看出v是定义的对象了,那为什么可以这样定义 Arr v(b,sizeof(b)/sizeof(b[0]));难道Arr在此处可以初始化,还可以定义对象吗?C++中有这种语法吗?

Arr  (int x[],int size                    )//构造函数,用size始化m,用参数x初始化数组a
Wrr:构造函数名  int x[] 形式参数,在本例中用来接收数组b   size  也是形式参数在本例中用来接收
sizeof(b)/sizeof(b[0]) 的计算结果


Arr v(    b  ,    sizeof(b)/sizeof(b[0])  );
Arr 类型名。 v 类型变量  b 第一个实际参数,传递给形式参数int x[],
       sizeof(b)/sizeof(b[0]) 第二个实际参数 传递给形式参数int size,
这个语句的意思是:新建一个arr类的变量,名为 v,它用b和后面的sizeof(b)/sizeof(b[0])表达式的值初始化
2011-04-29 09:09
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
嗯。楼上正解。

1) 像楼主这种情况,写 Arr v(b, 16) 也行。不过如果将来改源代码的话,增加或者减少点 b 的元素,那么下面这行也得跟着改。而用 sizeof 则不用担心。
2) 这个也说的很清楚。在定义对象的时候要调用构造函数。像楼主这种没有默认构造函数的情况,不写参数还不行呢。
2011-04-29 09:49
JackyZhang
Rank: 2
等 级:论坛游民
帖 子:82
专家分:29
注 册:2010-7-12
收藏
得分:0 
回复 3楼 pangding
thx ,i see

初生牛犊,望多多照顾!
2011-04-29 10:26
快速回复:【大家好】程序中有一部分 我实在想不明白【定义对象和初始化和一合并 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040374 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved