2012年4月11日水曜日

開発環境

  • Microsoft Windows 7 Home Premium (OS)
  • Microsoft Visual C# 2010 Express Edition (IDE)
  • 言語: C#

独習C# 第3版 ハーバート・シルト (著) エディフィストラーニング株式会社 矢嶋聡 (監修, 翻訳) の第8章(C継承)の理解度チェック1、2を解いてみる。

1.

基本クラスの中から、派生クラスのメンバーにアクセスできない。逆に派生クラスかの中から、基本クラスのメンバーにアクセスできる。

2.

コード

using System;

public class TwoDShape
{
    private double pri_width;
    private double pri_height;
    private string 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 name;}set{name=value;}
    }
    public TwoDShape()
    {
        Width = Height = 0.0;
        Name = "null";
    }
    public TwoDShape(double w, double h, string n)
    {
        Width = w;
        Height = h;
        Name = n;
    }
    public TwoDShape(double x,string n)
    {
        Width=Height=x;
        Name=n;
    }
    public TwoDShape(TwoDShape obj)
    {
        Width = obj.Width;
        Height = obj.Height;
        Name = obj.Name;
    }
    public void ShodDim()
    {
        Console.WriteLine(
            "Width and height are {0} and {1}", 
            Width, Height);
    }
    public virtual double Area()
    {
        Console.WriteLine("Area() must be overriden");
        return 0.0;
    }
}

public class Circle : TwoDShape
{
    public Circle(double r) :
        base(r, "circle") { }
    public override double Area()
    {
        return Math.Pow(Width / 2, 2) * Math.PI;
    }
}

class Tester
{
    public void Run()
    {
        double r=10;
        double width=2*r;
        Circle c = new Circle(width);
        c.ShodDim();
        Console.WriteLine(
            "半径{0}の円の面積: {1}",
            r, c.Area());
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

Width and height are 20 and 20
半径10の円の面積: 314.159265358979
続行するには何かキーを押してください . . .

0 コメント:

コメントを投稿