以下に示すようなクラスのセットがあります。ただし、追加の仮想メソッドで基本クラスを変更することなく、ユーザーがそれらから派生できるようにしたいと考えています。virtual int GetT(void){return 0;};
クラスで宣言せずにコードを変更する方法はありA
ますか?
A
問題をさらに説明するために、ユーザーがとB
(またはAext
とBext
) の両方を独自のメソッドで拡張できるようにしたいと思います。これらはA
とで仮想メソッドとして定義されていませんB
。基本クラスへのポインターを派生クラスのポインターにキャストできるキャストメソッドを探しています。本質的に、派生クラスへのポインターが含まれているdynamic_cast<Aext*>(Trajectory[i])
場合、つまり.Trajectory[i]
Aext
class A {
public:
int a;
A(int& ca) {a=ca;}
virtual int GetT(void){return 0;};
};
class B{
public:
boost::ptr_vector<A> Trajectory;
void PushBackStatePoint(int& ca);
};
void B::PushBackStatePoint(int& ca) {
Trajectory.push_back(new A(ca));
}
class Aext: public A {
public:
int t;
Aext(int& ca, int& ct) : A(ca) {t=ct;}
virtual int GetT(void) {return t;}
};
class Bext: public B {
public:
void PushBackStatePoint(int& ca, int &ct);
int GetFirstElement(void){return Trajectory[0].GetT();}
};
void Bext::PushBackStatePoint(int& ca, int &ct) {
Trajectory.push_back(new Aext(ca,ct));
}
int main(){
Bext MyB;
int a(5);
int t(3);
MyB.PushBackStatePoint(a,t);
std::cout << MyB.GetFirstElement();
}