Consider the following code scenario and complete the code in a manner that promotes encapsulation where appropriate.

Consider the following code scenario and complete the code in a manner that promotes encapsulation where appropriate. Make sure your selections correspond as well as possible to the class's stated goals. class Division: public Expression { [ Select ] ["public:", "protected:", "private:"] // The two operands of the division. Expression* left Side; Expression* right Side; [ Select ] ["public:", "protected:", "private:"] // Creates a new Division object using two existing Expression* objects as operands. Division (Expression* op1, Expression* op2); [ Select ] ["public:", "protected:", "private:"] // Gets the double-precision value modeled by this Division object. [ Select ] ["double to Double();", "double to Double() const;"] } // This class exists: class Person { public: int get Age(); } //Evaluate this code: int main() { const vector people; // Assume at least one valid Person pointer is entered into the "people" vector. return people[0]->get Age(): } WHICH IS THE CORRECT ANSWER? This code will compile. We are doing nothing to modify the address stored at index 0, even if get Age () could modify the object beyond the pointer. This code will not compile. We are doing nothing to modify the address stored at index 0, but get Age() could modify the object beyond the pointer, as it doesn't specify const. This code will compile. We are doing nothing to modify the address stored at index 0, and get Age () is only returning a simple value; there's no need to worry about modifying the object beyond the pointer. This code will compile due to a different reason than those offered above. This code will fail to compile due to a different reason than those offered above.