我有一组类似于下面显示的类。但是,我希望允许用户从它们派生而不必使用额外的虚拟方法修改基类。有没有一种无需virtual int GetT(void){return 0;};
在类中声明就可以修改代码的方法A
?
为了进一步解释这个问题,我想允许用户使用他们自己的方法来扩展A
and B
(或Aext
and ),这些方法在and中没有定义为虚拟方法。我正在寻找一种转换方法,该方法允许将指向基类的指针转换为派生类的指针。本质上,我想使用类似于if包含指向派生类的指针的东西,即.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();
}