関数の出力引数をクラスにするには?
既出、または基礎の質問でしたらすみません。
ここでも他の検索エンジンでも見つけられなかったので。。。
C++です。
クラスを出力する関数を作りたいのですが、うまくできません。
ソースは以下のとおりです。問題は、プログラム下方のf1(),f2(),main()です。
長くて、そして見づらくてすみません・・・
////////////
#include<stdio.h>
class test{
private:
int num;
float *vec;
public:
test(int n=1); //ctor
~test(); //dtor
int getnum(){return num;}
float* getvec();
void set(int,float*);
void show();
};
test::test(int n){
num = n;
vec = new float[n];
for(int i=0; i<n; i++)
vec[i] = (float)i;
}
test::~test()
{delete[] vec;}
float* test::getvec(){
float *v;
v = new float[num];
for(int i=0; i<num; i++)
v[i] = vec[i];
return v;
}
void test::set(int n, float *v){
num = n;
vec = new float[n];
for(int i=0; i<n; i++)
vec[i] = v[i];
}
void test::show(){
for(int i=0; i<num; i++)
printf("%d: %g\n",i,vec[i]);
}
void f1(test &x, test &y){
int n;
float *v;
n = x.getnum();
v = x.getvec();
for(int i=0; i<n-1; i++)
v[i] = 2.0*v[i];
y.set(n-1,v);
}
test f2(test x){
test y; //*
int n;
float *v;
n = x.getnum();
v = x.getvec();
for(int i=0; i<n-1; i++)
v[i] = 2.0*v[i];
y.set(n-1,v);
return y; //**
}
void main(){
test x,y;
int n = 4;
float v[4] = {1.0,2.0,3.0,4.0};
printf("x:\n"); x.set(n,v); x.show();
printf("f1:\n"); f1(x,y); y.show();
printf("f2:\n"); y=f2(x); y.show();
}
////////////
これを実行すると
x:
0: 1
1: 2
2: 3
3: 4
f1:
0: 2
1: 4
2: 6
f2:
0: 7.38979e-38
1: 7.38979e-38
2: 6
となります。
関数f2がうまく動かない理由がわかりません。。。
出力引数にクラスはとれないのでしょうか??
よろしくお願いします。
お礼
ありがとうございます。