c++编写动态数组类 TArray,构造函数里指针数组初始化问题

作者&投稿:城松 (若有异议请与网页底部的电邮联系)
c++在构造函数中初始化动态数组,我定义了一个类里面声明了一个动态数组,怎么对这个动态数组直接初始化~

这个绝对可以的,例子。
class A
{
private:
int *p;
A(int num)
{
p=new int[num];
}
};
在类中声明一个指针,在构造函数中分配空间。但是要记住delete p。
~A()
{
delete p;
}

我只知道在C里数组定义的时候得显式指定数组最大下标或者根据元素个数自动判断下标大小。
C++能这样定义既没具体元素也没最大下标的数组?int *a[]={};?

main.cpp
#include "1.h"
int main()
{
TArray a(10); // a是一个double 类型的长度为10动态数组
TArray b; // b是一个double 类型的尚未确定其长度的动态数组
b.SetLen(7); // 使b成为一个长度为7的动态数组
double d[10] = { 1,2,3,4,5,6,7,8,9,10 };
a.Input(d,10); // 把c中的10个元素复制到a中
a.Print(); // 打印a中的元素
TArray c(a); // 创建了一个与a一样的c数组
b = a; // 把a的内容复制给b
a.SetElem(0,6); // 把第0个元素的值重新赋值为6
b.Exchange(4,2); // 交换b中第4个和第2个元素的内容
b.Print(); // 打印b中的元素
a.Print(); // 打印a中的元素
c.Print(); // 打印c中的元素
return 0;
}
1.h
#include<iostream>
using namespace std;
class TArray
{
private:
double *a;
int n;
public:
TArray();
TArray(int number);
TArray(TArray &p);
void SetLen(int m);
void Input(double *b,int m);
void Print();
void SetElem(int m,double r);
void Exchange(int m,int r);
TArray operator=(TArray);
~TArray();
};

TArray::TArray()
{
a=NULL; //默认构造a=NULL,n=0;你的那个n没初始化,a申请内存肯定出错
n=0;
}

TArray::TArray(TArray &p)
{
n=p.n;
a=new double[n];
for(int i=0;i<n;i++)
a[i]=p.a[i];
}

TArray::TArray(int number)
{
n=number;
a=new double[n]; //得申请内存
}

void TArray::SetLen(int m)
{
n=m;
a=NULL; //得声明a=NULL
}

void TArray::Input(double *b,int m)
{
n=m;
for(int i=0;i<m;i++)
{
a[i]=b[i];
}
}

void TArray::Print()
{
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl; //加个endl让输出界面明朗
}

void TArray::SetElem(int m,double r)
{
a[m]=r;
}

void TArray::Exchange(int m,int r)
{
double temp;
temp=a[m];
a[m]=a[r];
a[r]=temp;
}

TArray TArray::operator=(TArray c)
{
a=new double[n]; //给你改了一下这个函数,你那个有问题
for(int  i=0;i<n;i++)
a[i]=c.a[i];
return *this;
}

TArray::~TArray()
{
delete []a;
}

满意请采纳哦!



在C + +的构造函数初始化只有在成员初始化列表中被称为“初始化”,“转让”
你不明白它的意思,静态成员,即使上面的代码编译器,并有相同的连接错误,

编译器会告诉你,“ZH,MM是没有定义”错误类型初始化

外的类的定义类ATM {

静态字符ZH [5] [10] ;/ *内置5个用户信息,ZH代表帐户,MM表示密码* /

静态字符MM [5] [6]; }; br的的/>字符ATM :: ZH [5] [10] = {'2','0','1','1','0','5','1' ,'7','1','0',/> '2','0','1','1','0','5','1','7',' 1','1',/> '2','0','1','1','0','5','1','7','1','2' ,'2','0','1','1','0','5','1','7','1','3',

' 2','0','1','1','0','5','1','7','1','4'};

字符ATM :: MM [5] [6] = {'9','2','0','8','0','0',

'9','2','0' ,'8','0','1',/> '9','2','0','8','0','2',

'9',' 2','0','8','0','3',/> '9','1','1','0','0','6'}; / a>
所以是没有问题的

#include<iostream>
using namespace std;
class TArray
{
private:
    double *a;
    int n;
public:
    TArray();
    TArray(int number);
    TArray(TArray &p);
    void SetLen(int m);
    void Input(double *b,int m);
    void Print();
    void SetElem(int m,double r);
    void Exchange(int m,int r);
    TArray &operator=(const TArray &);
    ~TArray();
};

TArray::TArray()
{
    a=new double[1];
    n = 1;
}

TArray::TArray(TArray &p)
{
    n=p.n;
    a=new double[n];
    for(int i=0;i<n;i++) {
        a[i] = p.a[i];
    }
}

TArray::TArray(int number)
{
    a=new double[number];
}

void TArray::SetLen(int m)
{
    delete[] a;
    n=m;
    a=new double[n];
}

void TArray::Input(double *b,int m)
{
    delete[] a;
    n = m;
    a=new double[n];
    for(int i=0;i<m;i++)
    {
        a[i]=b[i];
    }
}

void TArray::Print()
{
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
}

void TArray::SetElem(int m,double r)
{
    if(m<n)
    a[m]=r;
}

void TArray::Exchange(int m,int r)
{
    if(m>=n || r>=n) return;
    double temp;
    temp=a[m];
    a[m]=a[r];
    a[r]=temp;
}

TArray &TArray::operator=(const TArray &c)
{
    if(this != &c) {
        delete[] a;
        n = c.n;
        a=new double[n];
        for(int i=0;i<n;i++) {
            a[i] = c.a[i];
        }
    }
    return *this;
}

TArray::~TArray()
{
    delete []a;
}

 有问题私信或者qq慢慢问吧



干嘛要重复造轮子 std::vector<double> 不就可以了
模板类array(C++11)也行吧

这个。。。


asp 数组动态定义数组与静态数据定义方法
中的第一个位置 指数代表数组中的第二位 等等 有两种类型的VBScript数组 静态和动态 静态数组留在其整个寿命固定的大小 要 使用静态的VBScript数组你需要知道的前期元素这个数组将包含的最大数量 如果您 需要索引的大小可变更为灵活的VBScript数组 那么你可以使用动态的VBScript数组 VBScript中动态数组索引的...

C语言中怎样定义动态一维数组
在C语言中,数组的定义都是固定长度的,长度不允许变化。可以通过链表的方式来达到定义”动态数组“的等价功能,举例如下:链表节点定义如下:struct node{ int data; \/\/ 数据域 struct node *next; \/\/ 指针域};存放数据时可以对节点中的node赋值即可,如:struct node *p; \/\/ 定义一个链...

vc中如何声明一个动态数组?
iniclude "stdlib.h"用new申请,delete释放.例子如下:int* a;a = new int[4*100];...delete []a;

写动态数组类模板,结合综合实践,通过这个模板,定义两个动态数组类对象...
模板不是这样用的,如果是同一个基类的子类,使用基类指针比较好。模板是要用在不同类统一操作上 , (态数组类模板) 使用std::vector< T >

在C语言中,怎样定义一个动态的二维数组?
int b = atoi(argv[2]); \/\/将第2个变成2维大小 array = (int **)malloc(a*sizeof(int *)); \/\/申请第一组指针 int i;for(i=0; i < a; i++) { array[i] = (int*) malloc(b*sizeof(int));} \/\/记得释放,我赖的写了 } 编译后运行 mingling 3 4就能生成array[3][4]...

如何用java语言创建不定长动态数组
public class intArray { private int theSize=0;;private int a_int[]={};public intArray(int a[]){ this.a_int=a;this.theSize=a.length;} public intArray(){ this.theSize=0;} public int getSize(){ return this.theSize;} public int getAt(int nIndex){ return this.a_int...

c++ 里面怎样可以实现2维动态数组的分配和释放?
假设二维数组的元素是 Class T, 则可生成一个 template <class T>的动态二维数组。 必须注意以下几点。1,必须自定义一个以行数、列数为参数的构造函数。2,必须自定义析构函数,以保证在析构该二维数组类的同时确实清除所有元素的内存空间。3,为了使用方便,建议重载括号操作符,实现对元素的引用。...

excel 可不可以在VBA类模块里设置动态数组作为属性,然...
下载文件:类模块示例.xls|类模块的编写跟日常写代码的编程思想有很大反差,类模块的主题是创建,而日常的代码是使用。类模块里是禁止使用Public类型的动态数组作为模块级变量的,而私有级的变量外界不可直接调用,那么也失去了数组的意义。因为通过类模块创建的实例,我们通常称之为对象,而纵观Applicaiton...

动态数组类模版是什么意思呢 就是说把动态数组弄成一个类然后把这个类...
动态使得可以支持元素数量可变,模板使得可以支持不同类型,二者一结合,威力大无边

C++如何实现vector里面的元素循环?
C++中的vector是一种动态数组,可以方便地存储和使用多个元素。如果你想要实现vector里面的元素循环,可以考虑以下几种方法。使用for循环:你可以使用一个for循环来遍历vector中的每个元素,并对其进行相应的操作。例如,你可以使用索引来访问每个元素,然后根据需要进行相应的处理。在遍历到vector的末尾时,你...

隰县15833446101: C++创建动态数组 -
喻柄法罗: 直接用vector就好啦 include include include using namespace std; int main() { vector data; int number; while(cin >> number) data.push_back(number); sort(data.begin(), data.end()); return 0; } 大概流程就是这样吧.编译完exe,然后依次输入数字就好了, 如果真想亲自建动态数组的话用new int * data = new int [n]; 这样就建立了1 * n 的数组了.

隰县15833446101: C++编写程序,动态数组
喻柄法罗: #include&lt;iostream&gt; using namespace std; void main() { int size; int i=0; cout&lt;&lt;"input size:"&lt;&lt;endl;//定义数组的长度 cin&gt;&gt;size; int *a=new int[size];//申请动态数组 for(i=0;i&lt;size;i++) cin&gt;&gt;a[i]; cout&lt;&lt;"原数组:"...

隰县15833446101: 用C++编写动态数组 -
喻柄法罗: #include<iostream>#include<vector> using namespace std; int main() { int len; cin>>len; vector<int> arr(len); for(int i=0 ; i< len ; i++ ) arr[i]=i; for(i=0 ; i< len ; i++ ) cout<<arr[i]<<" "; return 0; } 注意:此种动态数组是不可变的,不能对它的元素进...

隰县15833446101: C++编写程序,动态数组 -
喻柄法罗: #include<iostream> using namespace std; void main() { int size; int i=0; cout<<"input size:"<<endl;//定义数组的长度 cin>>size; int *a=new int[size];//申请动态数组 for(i=0;i<size;i++) cin>>a[i]; cout<<"原数组:"<<endl; for(i=0;i<size;i++)cout...

隰县15833446101: C++ 中string类如何创建动态数组?求助!!! -
喻柄法罗: string其实就是对动态数组的封装,因此你不必在动态new,当然要这么做也可以,但是写法是string* pstr = new string;即可.不过你的问题不是出在这里,我改写了下,在vs2012下测试通过.#include <iostream>#include<string> using ...

隰县15833446101: C++创建动态 数组 -
喻柄法罗: str[0] str[1] 返回一个string 对象(*str)[0] (*str)[1] 分别返回str[0]的第1 第2 个字符 如果存在的话 不存在就报错 (str[_size]) 和 (*(str+_size))差不多一个意思 都是一个string对象

隰县15833446101: 用C++设计一个动态数组实现以下功能: -
喻柄法罗: class Array{int* data;int m_nSize;public:Array(int nSize) : m_nSize(nSize) { data = new int[nSize]; }~Array() { delete [] data ; data = null; }int Size()const { return m_nSize; }int operator [](int nIndex) const{if (data && nIndex >= 0 && nIndex ...

隰县15833446101: C++ 创建动态数组 -
喻柄法罗: 你这是创建了一个数组,数组的长度为2,这个数组一共包含两个string对象,分别是mat[0]和mat[1]. 不管是mat[0]还是mat[1],刚创建后,其字符串的长度都是0.

隰县15833446101: 如何在C++中创建一维动态数组? -
喻柄法罗: 在C++语言中,二维动态数组主要使用指针的方法建立,以建立一个整数二维数组为例:?123456789101112131415161718192021222324252627282930313233#include<iostream>#include<string>#include<malloc.h>using namespace std;int ...

隰县15833446101: 用C++编写动态数组
喻柄法罗: #include&lt;iostream&gt;#include&lt;vector&gt;using namespace std;int main(){ int len; cin&gt;&gt;len; vector&lt;int&gt; arr(len); for(int i=0 ; i&lt; len ; i++ ) arr[i]=i; for(i=0 ; i&lt; len ; i++ ) cout&lt;&lt;arr[i]&lt;&lt;" "; return 0;}注意:此种动态数组是不...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网