重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。
C++の初心者です。
違う引数をとって同じ関数にいれて同じようなことをさせるというのは
できるのでしょうか?
コンストラクタの作成方法で可能??
共用体で可能??
例:
型の違う構造体A,Bがある。
構造体のメンバには同じstatusが存在する。
statusが1のときだけresultを+し値を返す。
typedef struct{
  int status;
  int b;
} DATA_A;
typedef struct{
  int status;
  int b;
  int c;
} DATA_B;
int test(DATA_AかDATA_Bを引数でとる,int data_num){
//data_numはデータ数
 int i=0;
 int counter=0;
 for(i=0;i<data_num;i++){
  //DATA_AまたはDATA_Bのメンバstatusが1ならcounterを+する
  if(DATA_A.status == 1){
   counter++;
  }
 }
 return counter;
}
以上のような感じです。
引数の型が違う2つの関数を作ればできますが、
同じことをさせるので同じ関数で実現できないかなと思って
質問させてもらいました。
よろしくおねがいします。

A 回答 (2件)

テンプレートを使うとか


#include <iostream>

typedef struct{
int status;
int b;
} DATA_A;
typedef struct{
int status;
int b;
int c;
} DATA_B;

template <class T> int test(T data,int data_num){
int counter=0;
for(int i=0;i<data_num;i++){
if(data.status == 1){
counter++;
}
}
return counter;
}

int main(){
DATA_A a={ 1, 2 };
DATA_B b={ 0, 3 };

int result;
result = test<DATA_A>(a, 5);
std::cout << result << std::endl;

result = test<DATA_B>(b, 5);
std::cout << result << std::endl;

return 0;
}
    • good
    • 0
この回答へのお礼

御回答どうもありがとうございます。
やりたかったことができました(^^)

お礼日時:2006/04/17 06:42

派生させたらそれですむんじゃないでしょうか?



struct DATA_A {
 int status;
 int b;
};
struct DATA_B : public DATA_A {
 int c;
};

int test( DATA_A& data, int data_num ) {
//...
}

それとも派生が使えない理由があるのでしょうか?

この回答への補足

御回答ありがとうございます。
C++は初心者なのでそういう手があるのを知らなかっただけです。(--;)
しかしながらDATA_A,DATA_Bは既に定義されてしまっていて
そちらへの変更はできないのですが、それだと厳しいですか?

補足日時:2006/04/17 02:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!