I have a base class called Base and 2 derived classes called Derived and Combined. Combined takes in 2 instances of Derived class. When I run Combined.Run(input), the virtual function Update is being overridden, which is what I want. However, when I run B1.Update(B1.x) and B2.Update(B2.x) (within Combined.Update()), the virtual function Update are not being overridden. I want Derived.Update() to be called when I run B1.Update(B1.x). How can I fix this? Below is the code and console output. Thank you in advance.
#include <iostream>
#include <vector>
using namespace std;
class Base {
public:
vector<int> x;
Base(vector<int> x0) : x(x0) {}
virtual int Update(vector<int> x) {
cout << "Base Update" << endl;
return 0;
}
int Run(int input) {
return Update(x) + input;
}
};
class Derived : public Base {
public:
Derived(vector<int> x0) : Base(x0) {}
int Update(vector<int> x) {
cout << "Derived Update" << endl;
return x[0];
}
};
class Combined : public Base {
public:
Base B1;
Base B2;
Combined(Base& b1, Base& b2)
: Base({ 0, 0 }), B1(b1), B2(b2) {}
int Update(vector<int> x) {
cout << "Combined Update" << endl;
return B1.Update(B1.x) + B2.Update(B2.x);
}
};
int main() {
Derived D1({0});
Derived D2({0});
Combined C(D1, D2);
int input = 5;
cout << "Output = " << C.Run(input) << endl;
}
Console output:
Combined Update
Base Update
Base Update
Output = 5
What I want:
Combined Update
Derived Update
Derived Update
Output = 5