Am learning CPP and in the below code snippet, I am expecting 40 as the answer, but getting 30. Can anyone please help to identify what am I doing wrong.
The program may not make sense, but its just for learning.
class Shape {
protected:
    int shape = 10;
public:
    int get() {
        return shape;
    }
    virtual void process() {
        shape = 30;
    }
};
class Rectangle : public Shape {
public:
    void process() {
        shape = 40;
    }
};
class Object : Shape {
    Shape m_sh;
public:
    Object(Shape &sh) {
        m_sh = sh;
        m_sh.process();
    }
    int getShape() {
        return m_sh.get();
    }
};
int main(int argc, char *argv[]) {
    Rectangle rect;
    Object obj1 = Object(rect);
    std::cout << obj1.getShape() << std::endl; // am expecting 40, but getting 30.
}
