講義メモ 続き

p.195 メソッドのオーバーロード

・既述の通り、コンストラクタと同様にメソッドもオーバーロードが可能
・なお、メソッドのシグニチャには戻り値型は含まれないので、戻り値型のみが異なるメソッドのオーバーロードは認められずエラーになる

p.195 overload01.cs

//p.195 overload01.cs
using System;
class manymethods {
    public int Method(int x) {
        Console.WriteLine("第1のバージョンが呼ばれました");
        return x + 10;
    }
    public double Method(double x) {
        Console.WriteLine("第2のバージョンが呼ばれました");
        return x * 2;
    }
    public string Method(string x) {
        Console.WriteLine("第3のバージョンが呼ばれました");
        return x += "です";
    }
    public int Method(int x, int y) {
        Console.WriteLine("第4のバージョンか呼ばれました");
        return x + y;
    }
}
class overload01 {
    public static void Main() {
        manymethods m = new manymethods();
        Console.WriteLine("その戻り値は「{0}」です", m.Method(3));      //第1のバージョンが呼ばれる
        Console.WriteLine("その戻り値は「{0}」です", m.Method(3.2));    //第2のバージョンが呼ばれる
        Console.WriteLine("その戻り値は「{0}」です", m.Method("粂井")); //第3のバージョンが呼ばれる
        Console.WriteLine("その戻り値は「{0}」です", m.Method(5, 6));   //第4のバージョンが呼ばれる
    }
}

アレンジ演習:p.195 overload01.cs

・下記のシグニチャのMaxメソッドのオーバーロードを持つクラスMaxsを作成し、動作を確認しよう
 Max(int,int) //整数2値の最大値を返す
 Max(int,int,int) //整数3値の最大値を返す
 Max(int[]) //整数配列の要素の最大値を返す

作成例

//アレンジ演習:p.195 overload01.cs
using System;
class Maxs {
    public int Max(int x, int y) { //整数2値の最大値を返す
        return (x > y) ? x : y;
    }
    public int Max(int x, int y, int z) { //整数3値の最大値を返す
        int max = (x > y) ? x : y; //2値の最大値を得てから
        return (max > z) ? max : z; //3値目比べる
    }
    public int Max(int[] a) {
        int max = a[0]; //仮に先頭要素が最大とする
        for (int i = 1; i < a.Length; i++) { //先頭の次の要素から全要素について繰り返す
            if (max < a[i]) { //最大値超ならば
                max = a[i]; //最大値更新
            }
        }
        return max; //最大値を返す
    }
}
class overload01 {
    public static void Main() {
        Maxs m = new Maxs();
        Console.WriteLine("Max(3, 2) = {0}", m.Max(3, 2)); //第1のバージョンが呼ばれる
        Console.WriteLine("Max(3, 4, 2) = {0}", m.Max(3, 4, 2)); //第2のバージョンが呼ばれる
        int[] ma = {3, 4, 8, 2};
        Console.WriteLine("Max(3, 4, 8, 2) = {0}", m.Max(ma)); //第3のバージョンが呼ばれる
    }
}

作成例・効率アップバージョン

//アレンジ演習:p.195 overload01.cs
using System;
class Maxs {
    public int Max(int x, int y) { //①整数2値の最大値を返す
        int[] w = {x, y}; //2値を配列にして
        return Max(w); //③を呼ぶ
    }
    public int Max(int x, int y, int z) { //②整数3値の最大値を返す
        int[] w = {x, y, z}; //3値を配列にして
        return Max(w); //③を呼ぶ
    }
    public int Max(int[] a) { //③整数配列の最大値を返す
        int max = a[0]; //仮に先頭要素が最大とする
        for (int i = 1; i < a.Length; i++) { //先頭の次の要素から全要素について繰り返す
            if (max < a[i]) { //最大値超ならば
                max = a[i]; //最大値更新
            }
        }
        return max; //最大値を返す
    }
}
class overload01 {
    public static void Main() {
        Maxs m = new Maxs();
        Console.WriteLine("Max(3, 2) = {0}", m.Max(3, 2)); //第1のバージョンが呼ばれる
        Console.WriteLine("Max(3, 4, 2) = {0}", m.Max(3, 4, 2)); //第2のバージョンが呼ばれる
        int[] ma = {3, 4, 8, 2};
        Console.WriteLine("Max(3, 4, 8, 2) = {0}", m.Max(ma)); //第3のバージョンが呼ばれる
    }
}

提出:アレンジ演習:p.195 overload01.cs

参考:効率アップバージョンの有効活用

・下記のシグニチャのMaxメソッドのオーバーロードを持つクラスMaxsを作成できる
 Max(int,int) //整数2値の最大値を返す
 Max(int,int,int) //整数3値の最大値を返す
 Max(double,duuble,duuble,duuble) //実数4値の最大値を返す
 Max(double[]) //実数配列の要素の最大値を返す

//参考:効率アップバージョンの有効活用
using System;
class Maxs {
    public int Max(int x, int y) { //①整数2値の最大値を返す
        double[] w = {x, y}; //2値を実数配列にして
        return (int)Max(w); //④を呼び、戻り値をintにキャストする
    }
    public int Max(int x, int y, int z) { //②整数3値の最大値を返す
        double[] w = {x, y, z}; //3値を実数配列にして
        return (int)Max(w); //④を呼び、戻り値をintにキャストする
    }
    public double Max(double x, double y, double z, double a) { //③実数4値の最大値を返す
        double[] w = {x, y, z, a}; //4値を配列にして
        return Max(w); //④を呼ぶ
    }
    public double Max(double[] a) { //④実数配列の最大値を返す
        double max = a[0]; //仮に先頭要素が最大とする
        for (int i = 1; i < a.Length; i++) { //先頭の次の要素から全要素について繰り返す
            if (max < a[i]) { //最大値超ならば
                max = a[i]; //最大値更新
            }
        }
        return max; //最大値を返す
    }
}
class overload01 {
    public static void Main() {
        Maxs m = new Maxs();
        Console.WriteLine("Max(3, 2) = {0}", m.Max(3, 2)); //第1のバージョンが呼ばれる
        Console.WriteLine("Max(3, 4, 2) = {0}", m.Max(3, 4, 2)); //第2のバージョンが呼ばれる
        Console.WriteLine("Max(3.3, 4.4, 2.2, 6.6) = {0}", m.Max(3.3, 4.4, 2.2, 6.6)); //第3のバージョンが呼ばれる
        Console.WriteLine("Max(3.3, 4.4, 8.8) = {0}", m.Max(new double[] {3.3, 4.4, 8.8})); //第4のバージョンが呼ばれる
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です