2012年3月31日土曜日

開発環境

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

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

1.

問題のコードは正しくない。Xクラスのcountはprivate(記述がないときは標準のprivateになる)なので、Yクラスでは値を代入できない。

2.

アクセス修飾子は、メンバー宣言の前に指定しなければならない。

3.

コード

using System;

public class Stack
{
    private char[] s;
    private int loc;
    public Stack(int size)
    {
        s = new char[size];
        loc = 0;
    }
    public Stack(Stack obj)
    {
        loc = obj.loc;
        s = new char[obj.s.Length];
        for (int i = 0; i < s.Length; i++)
        {
            s[i] = obj.s[i];
        }
    }
    public Stack(char[] a)
    {
        loc = 0;
        s = new char[a.Length + 1];
        for (int i = 0; i < a.Length; i++)
        {
            Push(a[i]);
        }
    }
    public void Push(char ch)
    {
        if (loc == s.Length)
        {
            Console.WriteLine(" -- Stack is full.");
            return;
        }
        s[loc] = ch;
        loc++;
    }
    public char Pop()
    {
        if (loc == 0)
        {
            Console.WriteLine(" -- Stack is empty --.");
            return (char)0;
        }
        loc--;
        return s[loc];
    }
}

class Tester
{
    public void Run()
    {
        Stack s1 = new Stack(10);
        char[] name = { 'T', 'o', 'm' };
        Stack s2 = new Stack(name);
        char ch;
        for (int i = 0; i < 10; i++)
        {
            s1.Push((char)('A' + i));
        }
        Stack s3 = new Stack(s1);
        Console.Write("Contents of s1: ");
        for (int i = 0; i < 10; i++)
        {
            ch = s1.Pop();
            Console.Write(ch);
        }
        Console.WriteLine();
        Console.Write("Contents of s2: ");
        for (int i = 0; i < 3; i++)
        {
            ch = s2.Pop();
            Console.Write(ch);
        }
        Console.WriteLine();
        Console.Write("Contents of s3: ");
        for (int i = 0; i < 10; i++)
        {
            ch = s3.Pop();
            Console.Write(ch);
        }
        Console.WriteLine();
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

Contents of s1: JIHGFEDCBA
Contents of s2: moT
Contents of s3: JIHGFEDCBA
続行するには何かキーを押してください . . .

0 コメント:

コメントを投稿