I have a set of classes similar to the ones shown below. However, I would like to allow users to derive from them without having to modify the base classes with additional virtual methods. Is there a way of modifying the code without having to declare virtual int GetT(void){return 0;};
in class A
?
To explain the problem further, I would like to allow users to extend both A
and B
(or Aext
and Bext
) with their own methods, which are not defined as virtual methods in A
and B
. I am looking for a casting method that would allow casting a pointer to base class to a pointer of a derived class. In essence, I would like to use something similar to dynamic_cast<Aext*>(Trajectory[i])
if Trajectory[i]
contains a pointer to the derived class, i.e. 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();
}