こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

関数の出力引数をクラスにするには?

既出、または基礎の質問でしたらすみません。
ここでも他の検索エンジンでも見つけられなかったので。。。

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がうまく動かない理由がわかりません。。。
出力引数にクラスはとれないのでしょうか??

よろしくお願いします。

投稿日時 - 2008-03-31 20:19:11

QNo.3911035

困ってます

質問者が選んだベストアンサー

なんで「代入演算子が不要だ」と思ったんだろ....
y = f2(x);
ってまさに「代入」なんだけどなぁ....

投稿日時 - 2008-03-31 21:32:20

お礼

・・・まったく気づきませんでしたorz
Cを久しぶりに使って、しかもクラスはきちんと勉強したことがなかったので・・・
本当にありがとうございました!!
出直してきます。

投稿日時 - 2008-03-31 22:37:04

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

自分でメモリ管理をするんだから, コピーコンストラクタとか代入演算子はほぼ必須だと思う.

投稿日時 - 2008-03-31 21:03:06

お礼

ご指摘、ありがとうございます。
今回のプログラムには使わないので、
勝手に不要だと思っていたのですが・・・
両者を書き足してみます。

投稿日時 - 2008-03-31 21:23:08

あなたにオススメの質問