2017-11-07 5 views
0

データ構造に関する質問があります。一度にすべての変数を編集するのではなく、一度に全体の構造を編集する方法はありますか? FI:データ構造全体を編集するC++?

struct foo 
{ 
    int a=5; 
    int b=4; 
    int c=8; 
}; 
int main() 
{ 
    foo f; 

    f-1; 

    return 0; 

} 

結果:

f.int a=4; 
    f.int b=3; 
    f.int c=7; 

それは私が作っている特定のprojevtに多くのことをMI役立つだろうこれを行う方法があった場合。とにかく、あなたは時間だとあなたはおそらくoperator overloadingを探している "D

+3

[あなたのタイプの演算子をオーバーロード]へお気軽に(https://stackoverflow.com/questions/4421706/what-are-オペレーターオーバーロードのための基本ルールおよびイディオム)を意味のある方法で使用します。 –

+0

構造体の代わりに配列やリストが必要なようです。 –

+3

'f-1;'は正確に何にすることを意図していますか? – user0042

答えて

1

answer by Xiremaは、すでにあなたの質問に答えます。

私はちょうどあなたがオペレータの関数としてf-1をサポートしている場合、あなたがshにいくつかの演算子があることを指摘したいですouldもサポートしています。

幸いにも、いくつかの実装を再利用して他の実装を実装することができます。ここで

は私の提案です:

struct foo 
{ 
    int a=5; 
    int b=4; 
    int c=8; 

    // Pre-increment 
    foo& operator++() 
    { 
     ++a; 
     ++b; 
     ++c; 
     return *this; 
    } 

    // Post-increment 
    foo operator++(int) 
    { 
     foo copy = *this; 
     ++(*this); 
     return copy; 
    } 

    // Pre-decrement 
    foo& operator--() 
    { 
     --a; 
     --b; 
     --c; 
     return *this; 
    } 

    // Post-decrement 
    foo operator--(int) 
    { 
     foo copy = *this; 
     --(*this); 
     return copy; 
    } 

    // Increment 
    foo& operator+=(int v) 
    { 
     a += v; 
     b += v; 
     c += v; 
     return *this; 
    } 

    // Decrement 
    foo& operator-=(int v) 
    { 
     // Use the inrement operator. 
     return ((*this) += (-v)); 
    } 

    // Addition 
    foo operator+(int v) const 
    { 
     foo copy = *this; 
     copy += v; 
     return copy; 
    } 

    // Subtraction 
    foo operator-(int v) const 
    { 
     // Use the addition operator. 
     return ((*this) + (-v)); 
    } 
}; 

テストコード:

int main() 
{ 
    foo f1; 

    // Pre-increment 
    ++f1; 

    // Post-increment 
    f1++; 

    // Pre-decrement 
    --f1; 

    // Post-decrement 
    f1--; 

    // Increment 
    f1 += 10; 

    // Decrement 
    f1 -= 20; 

    // Addition 
    foo f2 = f1 + 20; 

    // Subtraction 
    foo f3 = f2 - 50; 
} 
+0

はい!これは私のプロジェクトに役立ちます。例をありがとう、あなたは時間だ:D –

7

を助けてくれてありがとう。

struct foo 
{ 
    int a=5; 
    int b=4; 
    int c=8; 
    foo operator-(int val) const { 
     foo copy(*this); 
     copy.a -= val; 
     copy.b -= val; 
     copy.c -= val; 
     return copy; 
    } 
}; 
int main() 
{ 
    foo f; 

    f = f - 1; 

    return 0; 

} 

あなたはコンパイル時にパラメータの番号がわからない場合にも、valarrayに見えるかもしれません。

+0

のすべての変数から1を引いて、時間の経過とともにこの時間を使うことができますか?ループでのfi? for(;;){f = f-1;}? –

+1

@AdamW。当然。 [C++教授のための良い本を見つける](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)が必要な場合があります。ファンダメンタルズの – Xirema

+0

['valarray'をしないでください](https://stackoverflow.com/a/1602787/4832499) –

関連する問題