问题描述
- 求助! 刚开始学C++,勉强写了这个程序,希望有大神帮忙改一下下~~
-
#include "stdafx.h"
#include "cstring"
#include "cstdio"
#include "iostream"using namespace std;
class Vect{
private:
int *comp;//用于储存向量中的各个分量;
size_t len;//向量长度;
static int counter;//储存在Add中抛出错误的个数
public:
//平凡构造函数。数组data中的数据即为向量的每个分向量值;
Vect(size_t n=0,int *data=NULL){
if(comp!=NULL){
len=n;
*comp=*data;}
}
//复制构造函数;深复制;
Vect(){
size_t n;size_t i=0;
n=length();
for(i=0;i<n;i++){
comp[i]=comp[i];
}
}
~Vect(){}//析构函数;size_t length();//计算向量的长度; bool empty();//向量判空; void clear();//删除向量,并将长度置0; void show();//显示向量; //友元函数 friend void Add(const Vect&,const Vect&,Vect&); friend void Throw(); //两个向量相加,计算结果储存在v3中;如果两个向量长度不相等,则抛出异常; //友元结束
};
int Vect::counter=0;
size_t Vect::length(){
int i=0;
if(comp[0]!=''){
while(comp[i]!='')i++;}
else return 0;
return i;
}
bool Vect::empty(){
size_t n,i=0;
n=length();
if(comp[i]==0)i++;
if(i<n-1){
cout<<"this oprand is not empty"<<endl;
return true;}
else{
cout<<"this oprand is empty"<<endl;
return false;}
}
void Vect::clear(){
if(!empty())return;
size_t i=0,n=length();
for(i=0;i<n;i++){
comp[i]=0;
}
len=0;
return;
}
void Vect::show(){
size_t i=0,n=length();
cout<<"this vector is:(";
for(i=0;i<n-1;i++){
cout<<comp[i]<<",";}
cout<<comp[n-1]<<")";
return;
}
void Add(const Vect& v1,const Vect& v2,Vect& v3){
Vect& v11=Vect(v1);
Vect& v21=Vect(v2);
size_t n1=v11.length();
size_t n2=v21.length();
if(n1!=n2){
Throw();
++Vect::counter;}
for(size_t i=0;i<n1;i++){
v3.comp[i]=v11.comp[i]+v21.comp[i];
v3.len=n1;
}
return;
}
void Throw(){
cout<<"the two oprands have diffrent length."<<endl;
return;
}
int main(){
cout<<"hello world!"<<endl;
int d1[3]={1,2,3};
int d2[3]={2,4,3};
int d3[3]={0,0,0};
Vect v1(3,d1),v2(3,d2),v3(3,d3);
Add(v1,v2,v3);
return 0;
}
这个程序写的勉强,自知问题颇多,希望有大神能帮忙改一改,谢谢!关于好多C++类的东西,我都还不是很多,在调用的时候,不止怎么用。有些东西涉及了C,但C不是学的很踏实,希望能弥补一下~谢谢啦~
解决方案
可以先看看C++ Primer一书