私の問題を説明するのはかなり難しいです。 私は2つのクラスを持っています、私はとDerived_A
と言うでしょう。名前から見ると、クラスDerived_A
はから派生しています。また私のプログラムでは、他の2つのクラスBase_B
とDerived_B
(継承もあります)があります。クラスはオブジェクトBase_B
を含み、クラスDerived_A
はオブジェクトDerived_B
を含む。C++継承ポインタ
class Base_A {
public:
Base_A() {}
virtual ~Base_A() {}
Base_B b_;
Base_B* pointer_;
void init() {
b_ = Base_B();
pointer_ = &b_;
pointer_->setValue(1);
}
void print() {
pointer_->getValue();
}
};
class Derived_A: public Base_A {
public:
Derived_A() {}
virtual ~Derived_A() {}
Derived_B b_;
Derived_B* pointer_;
void init() {
b_ = Derived_B();
pointer_ = &b_;
pointer_->setValue(2);
pointer_->increaseValue();
}
};
class Base_B {
public:
Base_B() {}
virtual ~Base_B() {}
int value_;
void setValue(int value) {
value_ = value;
}
void getValue() {
cout << "Base_B: " << value_ << endl;
}
};
class Derived_B: public Base_B {
public:
Derived_B() {}
virtual ~Derived_B() {}
void increaseValue() {
value_++;
}
};
int main() {
Derived_A derived_A = Derived_A();
derived_A.init();
derived_A.print();
return 0;
}
Aのすべてのクラスをどのように見ることができるかは、クラスBの1つのオブジェクトとこのオブジェクトへのポインタです。私の問題は、私が関数print()
を呼び出すと、Derived_B* pointer_
を受け取りませんが、存在しないBase_B* pointer_
にアクセスしようとしています。私のプログラムでは、クラスに応じてポインタを取るべきだと言うことができますか?それとも私がDerived_A
クラスのような内部Base_B* pointer_
をdeclarateする必要があります:
Base::pointer_ = pointer_;
たぶん、私の問題のための他の方法またはアルゴリズムはありますか?
ありがとうございました。
適切なポインタを返す仮想関数を作成できます。 Derived_Aに2つの 'pointer_'があることをご存知ですか? –
はい、私はDerived_Aに2つのポインタがあることを知っています。それはほんの一例でした。実際のプログラムでは、このポインタの名前は異なります。あなたのアイデアについて。あなたは私にクラスBのポインタを返す関数が必要であり、関数print()にこのポインタを渡すよりも、意味はありますか? –
どちらか、またはそのメソッド呼び出しを直接print()に入れます。また、バーチャルプリントを作成して派生クラスでオーバーライドすることもできます。私はあなたが何をしようとしているのか分かりません。 –