0

初期化リストに値を渡す前に、前処理アクティビティを実行したいと考えています。

(例: アサーション チェックを行うため)

ここに私の質問の文脈があります:私が持っていると仮定して、

1.    class B {
2.    private:
3.         int b_value;
4.    public:
5.         B(int input_of_b) {
6.             b_value = input_of_b;
7.        }
8.    };

9.   
10.    class A {
11.    private:
12.        int a_value;
13.        B b_obj
14.    public:
15.         A(int input_value) : b_obj(input_value) {
16.             //A constructor gets called after init list happens
17.        }
18.    };

15行目でどうなるか。初期化リストを呼び出して初期化する直前b_obj (b_value)- input_value へ

input_value の値を操作 (チェックまたは前処理) したい ??

どうすればこれを達成できますか? Java では、初期化ブロックのようなものがあります。

私はすでに考えました-

  1. クラス A と B の外部に関数を作成し、A のオブジェクトを作成する直前に、「input_value」で初期化して、その値を前処理します。(ただし、これは疎結合の概念に違反します)

  2. 親クラスを「Aの親」にしてクラスAにし、クラスAにそれを拡張させ、親コ​​ンストラクターが初期化リストの前に呼び出されるため、そのクラスで前処理を行いますか? 私はこれを試したことがないので、それが正しいアプローチであるかどうかはわかりません。

4

3 に答える 3

0

関数で実行してください!

int b_validate(int);

A::A(int input_value)
    : b_obj(b_validate(input_value))
{}

また、a_value代わりに削除する必要があるため、初期化していません。

于 2015-11-02T16:22:36.390 に答える
0

私があなたの質問を理解している限り、aのコンストラクターで入力を操作し、そのコンストラクターからその入力でbのコンストラクターを呼び出す必要があると思います。

于 2014-03-25T14:00:59.600 に答える