Question
#include <iostream>
#include <string>
using namespace std;
class Circle
{
public:
Circle(double radius) {this->radius = radius; }
void put() const {cout << "Radius = " << radius;}
private:
double radius;
};
class ColoredCircle: public Circle
{
public:
ColoredCircle(double radius, string color);
void put() const;
private:
string color;
};
ColoredCircle::ColoredCircle(double radius, string color)
: Circle(radius), color(color) {}
void ColoredCircle::put() const
{
Circle::put();
cout << " Color = " << color;
}
int main()
{
ColoredCircle redCircle(100., "red");
Circle* circle1 = &redCircle;
circle1->put();
cout << endl;
Circle circle(50.);
Circle* circle2 = &circle;
circle2->put();
cout << endl;
return 0;
}
Modify the program so that the put function is virtual. What is the output after that change? Does Java allow both virtual and non-virtual methods? If not, which does it allow? Rewrite this program in Java and identify at least four differences between the programs in the two languages.
2. Consider the following C++ main function in place of the one in previous problem.
int main()
{
Circle circle1(100.), *circle2 = new Circle(200.);
ColoredCircle redCircle(300, "red"), *blueCircle = new ColoredCircle(400., "blue");
circle1 = redCircle;
circle2 = blueCircle;
circle1.put();
cout << endl;
circle2->put();
cout << endl;
return 0;
}
Assuming the put function was made virtual, what is the output of the above program? This program contains an example of object slicing. On what line does it occur? Why must it happen? Explain why this never happens in Java. Do some investigating and determine how C# avoids this problem.
Solution Preview
This material may consist of step-by-step explanations on how to solve a problem or examples of proper writing, including the use of citations, references, bibliographies, and formatting. This material is made available for the sole purpose of studying and learning - misuse is strictly forbidden.