
我要被这个C++程序整疯了(关于拷贝函数),请进来看看吧!!!~~~~(>_<)~~~~
程序如下:////e0902.cpp//#include<iostream>usingnamespacestd;//classVector{intsize;int*buf...
程序如下:
//
//e0902.cpp
//
#include<iostream>
using namespace std;
//
class Vector{
int size;
int* buffer;
public:
Vector(int s=100);
Vector(const Vector &t );
int& elem(int ndx);
void display();
void set();
~Vector();
};
Vector::Vector(int s){
buffer=new int[size=s];
for(int i=0; i<size; i++)
buffer[i]=i*i;
}
Vector::Vector(const Vector &t){
cout<<"copy Constructing "<<t.size<<"\n";
buffer=new int[t.size];
for(int i=0; i<t.size; i++)
buffer[i]=i*i;
}
int& Vector::elem(int ndx){
if(ndx<0||ndx>=size){
cout<<"error in index"<<endl;
exit(1);
}
return buffer[ndx];
}
void Vector::display(){
cout<<"construting"<<size<<"\n";
for(int j=0; j<size; j++)
cout<<buffer[j]<<endl;
}
void Vector::set(){
for(int j=0; j<size; j++)
buffer[j]=j+1;
cout<<buffer[j]<<endl;
}
Vector::~Vector(){ delete[]buffer; }
//
int main(){
Vector a(10);
Vector b(a);
a.set();//这里,我只希望对象a当中的size能够传到set()当中去,但看起来并不成功!
b.display();//同样,我也希望b当中的size能够传到display()当中去,也失败了!
}
对象a、b中的size就是无法传到他们所调用的函数中去!!怎么样才能做到这一点呢?
更让我不解的是,为什么删掉那个拷贝构造函数之后对象a、b中的size都能成功传到两个函数当中去呢?
答得好绝对加分,因为我好崩溃啊,能想到的都试过了。。唉。。。
谢谢了!!!! 展开
//
//e0902.cpp
//
#include<iostream>
using namespace std;
//
class Vector{
int size;
int* buffer;
public:
Vector(int s=100);
Vector(const Vector &t );
int& elem(int ndx);
void display();
void set();
~Vector();
};
Vector::Vector(int s){
buffer=new int[size=s];
for(int i=0; i<size; i++)
buffer[i]=i*i;
}
Vector::Vector(const Vector &t){
cout<<"copy Constructing "<<t.size<<"\n";
buffer=new int[t.size];
for(int i=0; i<t.size; i++)
buffer[i]=i*i;
}
int& Vector::elem(int ndx){
if(ndx<0||ndx>=size){
cout<<"error in index"<<endl;
exit(1);
}
return buffer[ndx];
}
void Vector::display(){
cout<<"construting"<<size<<"\n";
for(int j=0; j<size; j++)
cout<<buffer[j]<<endl;
}
void Vector::set(){
for(int j=0; j<size; j++)
buffer[j]=j+1;
cout<<buffer[j]<<endl;
}
Vector::~Vector(){ delete[]buffer; }
//
int main(){
Vector a(10);
Vector b(a);
a.set();//这里,我只希望对象a当中的size能够传到set()当中去,但看起来并不成功!
b.display();//同样,我也希望b当中的size能够传到display()当中去,也失败了!
}
对象a、b中的size就是无法传到他们所调用的函数中去!!怎么样才能做到这一点呢?
更让我不解的是,为什么删掉那个拷贝构造函数之后对象a、b中的size都能成功传到两个函数当中去呢?
答得好绝对加分,因为我好崩溃啊,能想到的都试过了。。唉。。。
谢谢了!!!! 展开
2个回答
展开全部
改两个函数就行了
第一个:复制构造函数
Vector::Vector(const Vector &t)
{
cout<<"copy Constructing "<<t.size<<"\n";
buffer=new int[t.size];
size=t.size;//给size赋值
for(int i=0; i<t.size; i++)
buffer[i]=i*i;
}
复制构造函数中也要给size变量赋值,否则会影响显示的。
第二个:set函数
void Vector::set(){
for(int j=0; j<size; j++){
buffer[j]=j+1;
cout<<buffer[j]<<endl;
}
}
给for循环加上花括号,因为要执行的循环语句有两句。
第一个:复制构造函数
Vector::Vector(const Vector &t)
{
cout<<"copy Constructing "<<t.size<<"\n";
buffer=new int[t.size];
size=t.size;//给size赋值
for(int i=0; i<t.size; i++)
buffer[i]=i*i;
}
复制构造函数中也要给size变量赋值,否则会影响显示的。
第二个:set函数
void Vector::set(){
for(int j=0; j<size; j++){
buffer[j]=j+1;
cout<<buffer[j]<<endl;
}
}
给for循环加上花括号,因为要执行的循环语句有两句。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询