c++ inheritance pointer -
c++ inheritance pointer -
it's pretty diffecult me describe problem. have 2 classes, base_a , derived_a. can see names, class derived_a derived base_a. in programme have other 2 classes base_b , derived_b (also inheritance). class base_a contains object of base_b, , class derived_a contains object of derived_b.
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(); homecoming 0; } how can see every class of has 1 object of class b , pointer object. problem is, when phone call function print(), not take derived_b* pointer_, seek access base_b* pointer_, not exist. how can in program, should take pointer according class? or need declarate base_b* pointer_ within derived_a class like:
base::pointer_ = pointer_; maybe there other method or algorithm problem?
thank lot.
"but seek access base_b* pointer_, not exist"
if deriveda not initialise basea, deriveda not meet "isa" rule inheritance , design needs changed. on face of things:
b_, pointer_. confusing , gain no value. make init() virtual. have deriveda::init() phone call basea::init() explicitly. make pointer_ virtual method. note utilize of "covariant homecoming types" virtual methods.
class basea { public: virtual baseb* pointer() { homecoming &b_; } // etc. }; class deriveda : public basea { public: virtual derivedb* pointer() { homecoming &b_; } // etc. }; c++ inheritance pointers
Comments
Post a Comment