C++对象数组创建与释放问题,new与delete

class VC
{
private:
float* p_val;
int size;
public:
CVector(float *,int s);
CVector(const CVector &v);
~CVector();
void display(){
for(i=0;i<size;i++)
cout<<p_val[i]<<" ";
cout<<endl;}
};
CVector::CVector(float *p,int s)
{
size=s;
p_val=new float[size];
for(i;i<size;i++)
p_val[i]=p[i];
}
CVector::CVector(const CVector &v)
{
size=v.size;
p_val=new float[v.size];
for(i=0;i<size;i++)
p_val[i]=v.p_val[i];
}
CVector:: ~CVector()
{
delete []p_val;
}

int main()
{
float a[5]={1,2,3,4,5},b[5]={6,7,8,9,10};
CVector c1(a,5),c2(c1);
CVector c3(b,5);
cout<<"对象c1: ";
c1.display();
cout<<"对象c2:";
c2.display();
cout<<"对象c3: ";
c3.display(); // 这里为什么输出的数据是乱码?
return 0;
}
还有,为什么声明时CVector& operator = (const CVector &v); //赋值运算符重载
float& operator[] (int ix); //下标运算符重载
关键字operator前面要加&,是什么意思?
在类外定义时CVector & CVector::operator =(const CVector &v)
float & CVector:: operator [] (int ix)
& 又提到前面?

在重载 其它运算符如 +、++、-时,为什么没有用 &?

你这个是你的源代码么?类名不对,i 也没定义。改了之后倒是能正确输出。

class CVector

{

private:

  float* p_val;

  int size;

public:

  CVector(float *,int s);

  CVector(const CVector &v);

  ~CVector();

  void display(){

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

  cout<<p_val[i]<<" ";

  cout<<endl;}

};

CVector::CVector(float *p,int s)

{

size=s;

p_val=new float[size];

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

p_val[i]=p[i];

}

CVector::CVector(const CVector &v)

{

size=v.size;

p_val=new float[v.size];

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

p_val[i]=v.p_val[i];

}

CVector:: ~CVector()

{

delete []p_val;

}


int main()

{

float a[5]={1,2,3,4,5},b[5]={6,7,8,9,10};

CVector c1(a,5),c2(c1);

CVector c3(b,5);

cout<<"对象c1: ";

c1.display();

cout<<"对象c2:";

c2.display();

cout<<"对象c3: ";

c3.display();   //             这里为什么输出的数据是乱码?

system("pause");

return 0;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-07-18
#include<iostream>
using namespace std;
class CVector
{
private:
  float* p_val;
  int size;
public:
  CVector(float *,int s);
  CVector(const CVector &v);
  ~CVector();
  void display(){
  for(int i = 0;i < size;i++)
  cout<<p_val[i]<<" ";
  cout<<endl;}
};
CVector::CVector(float *p,int s)
{
size = s;
p_val=new float[size];
for(int i = 0;i < size;i++)
p_val[i] = p[i];
}
CVector::CVector(const CVector &v)
{
size=v.size;
p_val=new float[v.size];
for(int i = 0; i < size; i++)
p_val[i] = v.p_val[i];
}
CVector:: ~CVector()
{
delete []p_val;
}

int main()
{
float a[5]={1,2,3,4,5},b[5]={6,7,8,9,10};
CVector c1(a,5),c2(c1);
CVector c3(b,5);
cout<<"对象c1: ";
c1.display();
cout<<"对象c2:";
c2.display();
cout<<"对象c3: ";
c3.display();   //             这里为什么输出的数据是乱码?
return 0;
}

程序没有问题,主要是i没有初始化,改完后在我这运行正常。

对象c1: 1 2 3 4 5

对象c2:1 2 3 4 5

对象c3: 6 7 8 9 10

本回答被提问者采纳
第2个回答  2013-06-14
CVector::CVector(float *p,int s)
{
size=s;
p_val=new float[size];
for(i;i<size;i++)
p_val[i]=p[i];
}

你自己看下你的i没有初始化。
最奇怪的是,你的i明明没有定义,为什么你的程序能运行?

函数的返回类型后面加个&,是表示返回一个引用类型。
作用可以看下这个
http://baike.baidu.com/view/8360670.htm本回答被网友采纳
第3个回答  2013-06-14
问题应该出在i上吧
没看到你的i变量定义在哪里
改了一下
运行结果是正确的

#include <iostream>
using namespace std;
class CVector
{
private:
float* p_val;
int size;
public:
CVector(float *,int s);
CVector(const CVector &v);
~CVector();
void display()
{
int i;
for(i=0;i<size;i++)
cout<<p_val[i]<<" ";
cout<<endl;
}
};
CVector::CVector(float *p,int s)
{
int i=0;
size=s;
p_val=new float[size];
for(i;i<size;i++)
p_val[i]=p[i];
}
CVector::CVector(const CVector &v)
{
int i;
size=v.size;
p_val=new float[v.size];
for(i=0;i<size;i++)
p_val[i]=v.p_val[i];
}
CVector:: ~CVector()
{
delete []p_val;
}
int main()
{
float a[5]={1,2,3,4,5},b[5]={6,7,8,9,10};
CVector c1(a,5),c2(c1);
CVector c3(b,5);
cout<<"对象c1: ";
c1.display();
cout<<"对象c2:";
c2.display();
cout<<"对象c3: ";
c3.display(); // 这里为什么输出的数据是乱码?
return 0;
}

type & func_name(va_list)
的形势,&修饰的是前面的type 表示其返回值为引用类型。 所以&紧跟前面的类型
用引用做返回值可以减少中间临时变量的生成,从而增加效率
是否使用引用返回值,在重载运算符时没有强制的要求,全凭自愿
但是如果用一些STL 模板, 模板会对重载类型有要求,如果不一致会报错。其他的倒是没什么大的影响
相似回答