using System;
class Shape {
double pri_width; // private
double pri_height; // private
string pri_name; // private
public Shape() {
width = height = 0.0;
name = "null";
}
public Shape(double w, double h, string n) {
width = w;
height = h;
name = n;
}
public Shape(double x, string n) {
width = height = x;
name = n;
}
public Shape(Shape ob) {
width = ob.width;
height = ob.height;
name = ob.name;
}
// Properties for width, height, and name
public double width {
get { return pri_width; }
set { pri_width = value; }
}
public double height {
get { return pri_height; }
set { pri_height = value; }
}
public string name {
get { return pri_name; }
set { pri_name = value; }
}
public void showDim() {
Console.WriteLine("Width and height are " +
width + " and " + height);
}
public virtual double area() {
Console.WriteLine("area() must be overridden");
return 0.0;
}
}
class Triangle : Shape {
string style; // private
public Triangle() {
style = "null";
}
public Triangle(string s, double w, double h) :
base(w, h, "triangle") {
style = s;
}
public Triangle(double x) : base(x, "triangle") {
style = "isosceles";
}
public Triangle(Triangle ob) : base(ob) {
style = ob.style;
}
// Override area() for Triangle.
public override double area() {
return width * height / 2;
}
// Display a triangle's style.
public void showStyle() {
Console.WriteLine("Triangle is " + style);
}
}
class Rectangle : Shape {
public Rectangle(double w, double h) : base(w, h, "rectangle"){ }
public Rectangle(double x) : base(x, "rectangle") { }
// Construct an object from an object.
public Rectangle(Rectangle ob) : base(ob) { }
// Return true if the rectangle is square.
public bool isSquare() {
if(width == height) return true;
return false;
}
// Override area() for Rectangle.
public override double area() {
return width * height;
}
}
class DynShapes {
public static void Main() {
Shape[] shapes = new Shape[5];
shapes[0] = new Triangle("right", 8.0, 12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10, 4);
shapes[3] = new Triangle(7.0);
shapes[4] = new Shape(10, 20, "generic");
for(int i=0; i < shapes.Length; i++) {
Console.WriteLine("object is " + shapes[i].name);
Console.WriteLine("Area is " + shapes[i].area());
Console.WriteLine();
}
}
}
object is triangle
Area is 48
object is rectangle
Area is 100
object is rectangle
Area is 40
object is triangle
Area is 24.5
object is generic
area() must be overridden
Area is 0