| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 757 人关注过本帖
标题:C++模板问题,帮忙看下,谢谢!
只看楼主 加入收藏
思忆季节
Rank: 2
来 自:珠海
等 级:论坛游民
帖 子:42
专家分:62
注 册:2010-5-12
结帖率:100%
收藏
已结贴  问题点数:6 回复次数:6 
C++模板问题,帮忙看下,谢谢!
题目:/*设计一个类模板,用来实现动态数组(数组元素个数可以在运行时变化)*/
我的程序如下,帮忙看一下,谢谢
#include<iostream.h>
#include<stdlib.h>
template <class T>
class MyArray
{
    int size;
    int len;
public:
    T *data;
    MyArray(int n=0)
    {size=n;}
    ~MyArray(){delete []data;}
    T & operator [](int index);
    void push(T d);
};
template <class T>
T& MyArray<T>::operator [](int index)
{
    if(index<0||index>len)
  {
    cout<<"Bad subscript!"<<endl;
    exit(1);
  }
  return data[index];
}
template <class T>
void MyArray<T>::push(T d)
{
    if(len==size)
  {
    cout<<"The Array is full!"<<endl;
    size++;
    return;
  }
  data[len]=d;
  len++;
}
void main()
{
    MyArray<int>  a(2);
    a.push(11);
    a.push(22);
    a.push(33);
    a[0]=44;
    cout<<a[0]<<a[1]<<a[2];
}
搜索更多相关主题的帖子: 模板 
2010-06-28 14:27
思忆季节
Rank: 2
来 自:珠海
等 级:论坛游民
帖 子:42
专家分:62
注 册:2010-5-12
收藏
得分:0 
运行之后出现内存XX错误,帮忙修改下,给点建议!谢谢
2010-06-28 14:50
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
收藏
得分:6 
改了一下,看看行不行:
程序代码:
#include<iostream.h>
#include<stdlib.h>
template <class T>
class MyArray
{ 
    int len;
public:
    T *data;
    MyArray()
    {
       data = NULL;
       len = 0;
    }
    ~MyArray()
    {
        delete[] data;
    }
    T& operator [](int index);
    void push(T d);
};
template <class T>
T& MyArray<T>::operator [](int index)
{
    if(index<0||index>(len-1))
    {
        cout<<"Bad subscript!"<<endl;
        exit(1);
    }
    return data[index];
}
template <class T>
void MyArray<T>::push(T d)
{
    T *pdata = data;
    data = new T[len + 1];
    if(pdata != NULL)
    {
        for(int i = 0 ; i < len ; i++)
        {
            data[i] = pdata[i];
        }   
        delete[] pdata;
    }
    data[len] = d;
    len++;
}

int main(int argc, char* argv[])
{
    MyArray<int>  a;
    a.push(11);
    a.push(22);
    a.push(33);
    a.push(55);
    a[0]=44;
    cout<<a[0]<<endl<<a[1]<<endl<<a[2]<<endl<<a[3]<<endl;
    return 0;
}

 

[ 本帖最后由 pbreak 于 2010-6-28 17:51 编辑 ]
2010-06-28 17:50
思忆季节
Rank: 2
来 自:珠海
等 级:论坛游民
帖 子:42
专家分:62
注 册:2010-5-12
收藏
得分:0 
很好,int main(int argc, char* argv[])这里我改为无参也对,能跟我说一下有无参数的区别吗?谢谢!
2010-06-28 23:52
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
收藏
得分:0 
第一个参数 int argc 代表命令行参数的个数,第二个参数char* argv[]为命令行参数数组
在有参数的情况下就可以接收命令行的参数。。。比如:在从命令行输入一个路径。。
2010-06-29 08:34
qianzezi_pku
Rank: 1
等 级:新手上路
威 望:1
帖 子:8
专家分:2
注 册:2010-7-21
收藏
得分:0 
程序崩溃的主要原因是:
1:没有给 T *data 没有给data 分配内存空间。
2:也没有初始化 int len; 变量不初始化会导致意想不到的结果。
3:条件有问题if(index<0||index>len) 应该改为if(index<0||index>len-1)

修改以后,程序代码如下:
#include<iostream.h>
#include<stdlib.h>


template <class T>
class MyArray
{
private:
    int size;
    int len;
public:
    T *data;
    MyArray(int n)
    {
        size=n;
        len =0;
        data = (T*)malloc(size*sizeof(T));
    }
    ~MyArray()
    {
        free(data);
        data=NULL;
        len =0;
    }
    T & operator [](int index);
    void push(T d);
};



template <class T>
T& MyArray<T>::operator [](int index)
{
    if(index<0||index>(len-1))
    {
        cout<<"Bad subscript!"<<endl;
        exit(1);
    }
    return data[index];
}


template <class T>
void MyArray<T>::push(T d)
{
    if(len==size)
    {
        cout<<"The Array is full!"<<endl;
        size++;
        return;
    }
    data[len]=d;
    len++;
}


void main()
{
    MyArray<int>  a(5);
    a.push(11);
    a.push(22);
    a.push(33);
    a[0]=44;
    cout<<a[0]<<endl<<a[1]<<endl<<a[2]<<endl;
}
2010-07-21 21:38
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
大家基本上改了不少了,我给几个建议吧。

第一个分配内存用 new 更好一点。虽然效率低一些,但不容易出错。用 malloc 如果 T 是一个比较复杂类,那么分配内存之后还需要调构造函数初始化一下,以保证一致性。 这个工作 new 会自动做,用 malloc 经常容易忘。除非要编对效率要求比较高一点的程序,否则不建议用 malloc。

另外,如果楼主会的话。越界可以抛异常,比直接终止程序要健壮一些。

另外一般讲对象的书上,可能会介绍化簡了一些的类似 vector 的例子。楼主可以去学习一下,也许会有一定的收获。
2010-07-22 10:04
快速回复:C++模板问题,帮忙看下,谢谢!
数据加载中...
 
   



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

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