
お世話になります。
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つの関数を作ればできますが、
同じことをさせるので同じ関数で実現できないかなと思って
質問させてもらいました。
よろしくおねがいします。
No.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;
}
No.1
- 回答日時:
派生させたらそれですむんじゃないでしょうか?
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は既に定義されてしまっていて
そちらへの変更はできないのですが、それだと厳しいですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラー 添字が付けられた値が、...
-
「指定されたキャストは有効で...
-
C言語で分からないところがあり...
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
std::set<int> で、ある値が何...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
systemの戻り値を取得する方法
-
if と配列の組み合わせ
-
acceptをalarmでタイムアウトさ...
-
(マルチスレッド)_beginthrea...
-
比較回数と交換回数表示について
-
整数データの配列から同じ値の...
-
C言語で三目並べをするプログラ...
-
式は定数値が必要です」という...
-
system関数がうまくいかない
-
リッチテキストへの行ごとの背...
-
HANDLEて何ですか?
-
CStringの配列要素を関数で受け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
ColorをRGBで指定する方法
-
未解決の外部シンボル _printf...
-
構造体の勉強中です 合計点の高...
-
商と剰余を同時に求める(C言語)
-
C言語で分からないところがあり...
-
式は定数値が必要です」という...
-
C言語での奇数の和
-
std::set<int> で、ある値が何...
-
課題でつまってます・・・
-
int16_t の _t は何?
-
比較回数と交換回数表示について
おすすめ情報