Author: maurundog

講義メモ 後半

p.243 クラスの継承とコンストラクタ(引数なしの場合) ・どんなクラスであっても、コンストラクタは省略可能 ・省略すると引数のない&中身のないコンストラクタが自動的に用意される ・基本クラスのオブジェクトを引数のないnewで生成すると、その引数のないコンストラクタが呼ばれる ・派生クラスのオブジェクトを引数のないnewで生成すると:  ①基本クラスの引数のないコンストラクタが呼ばれる  ②派生クラスの引数のないコンストラクタが呼ばれる ・こうすることで、基本クラスで定義したデータメンバの初期化や基本クラス用の準備作業をコンストラクタに書いておくことにより、  派生クラスのオブジェクト生成時に自動的に実行される ・例: class Slime { //基本クラス   public int hp;   public Slime { hp = 10; } //コンストラクタ①  } class HoimiSlime : Slime { //派生クラス   //ここに「public int hp」があるとみなされる   public int mp;   public HoimiSlime { mp = 20; } //コンストラクタ②  }  class Game {   public play() {    HoimiSlime hoimin = new HoimiSlime(); //①②が動作してhpもmpも初期化される    : p.243 inheritance06.cs //p.243 inheritance06.cs using System; class MyBase { //基本クラス     protected int x; //非公開で継承可能なデータメンバ     public MyBase() { //コンストラクタ①         Console.WriteLine("ここはMyBase");         x = 10;     } } class Derived1 : MyBase { //派生クラス     //ここに「protected int x;」があるとみなされる     public Derived1() { //コンストラクタ②         Console.WriteLine("ここはDerived1");         x = 20;     } } class Derived2 : Derived1 { //派生の派生クラス…

Read the full article

講義メモ

・p.229(baseキーワード)から アレンジ演習:p.228 inheritance03.cs ・基本クラスの両メンバをprotectedにしても、名前の隠ぺいが起こること(同じ結果になること)を確認しよう 作成例 //アレンジ演習:p.228 inheritance03.cs using System; class Base { //基本クラス     protected int x = 10; //非公開だが継承可能なデータメンバ     protected void BaseMethod() { //非公開だが継承可能なメソッド         Console.WriteLine("Baseクラスです");     } } class Derived : Base { //派生クラス     new public int x = 20; //データメンバの名前の隠ぺい     new public void BaseMethod() { //メソッドの名前の隠ぺい         Console.WriteLine("Derivedクラスです");     } } class inheritance03 {     public static void Main() {         Derived d = new Derived(); //派生クラスのインスタンスを生成         Console.WriteLine("x = {0}", d.x); //隠ぺいしたデータメンバが用いられる         d.BaseMethod(); //隠ぺいしたメソッドが実行される     } } p.229(baseキーワード) ・名前の隠ぺいは基本クラスと同じ意味のメンバに同じ名前をつけることで、似た名前のメンバの乱立を防ぐことができる ・とはいえ「上書き」ではなく「隠ぺい」なので、対象となっている基本クラスのメンバを「base.」を前置することで呼び出し可能 p.229 inheritance04.cs //p.229 inheritance04.cs using System; class Base { //基本クラス     protected int x = 10; //非公開だが継承可能なデータメンバ } class Derived : Base { //派生クラス     //ここに「protected int x = 10;」が継承されているが↓に隠ぺいされる     new int x = 20; //名前の隠ぺいを行うデータメンバ     public…

Read the full article

今週の話題

今回トップも「マリオvs.ドンキーコング(Switch)」GO! 『ダンクロ』不調で3期連続赤字のKLab、EAとの協業で逆転狙う【ゲーム企業の決算を読む】GO! TGS2024でインディーゲームを無料出展―「Selected Indie 80」出展タイトルを募集中【TGS2024】GO! 『ラグナロク』好調も先細りが懸念材料?ガンホーは北米エリア開拓がカギ【ゲーム企業の決算を読む】GO! Respawn開発の「スター・ウォーズ」FPSも開発中止に…EA、全従業員の約5%を削減へ GO! Epic Gamesがハッキングされた疑い―犯人グループが約200GBの内部情報をおさえたと主張 GO!

休講でしたが今週の話題

今回トップは「マリオvs.ドンキーコング(Switch)」GO! Aiming、コロプラとの資本業務提携で16.4億円の資金調達―新規オンラインゲーム共同開発など目指す GO! 「INDIE Live Expo」2024年5月25日に開催決定ー出展エントリーは3月12日まで GO! 「PlayStation VR2(PS VR2)」が2024年内にPCでも利用可能になるとソニーがひっそり発表 GO! 「子供がプロeスポーツチームにスカウトされた」との問い合わせ相次ぐ…チームは“詐欺行為”の可能性があると注意喚起 GO!

休講のお詫び

本日は校舎工事の都合で休講となり、申し訳ありません。 変更後のスケジュールは確定次第掲載いたします。 よろしくお願いいたします。

次回予告

今回はお二人ともお休みでしたので、次回はp.229(baseキーワード)からとなります。 なお、残り3回で4回分の講義を行いますので、ペースが速くなります。ご了承ください。

前回のコメント

・練習問題が難しかった ・8章の練習問題への理解が足りないので家で復習しようと思います  難問でしたね。  次回冒頭に少しフォローしますので、理解を深めてください。

講義メモ 第9章 継承

p.223 クラスの継承の基礎 ・クラスは部品化に有効だが、きちんと管理しないと(特にチーム開発では)意味が近いクラスが乱立したり、  同じ処理内容が複数のクラスに記述されて矛盾を起こしやすい。 ・この対策として、クラスに親子関係を作り、親から子に情報が引き継がれるようにするのが継承 ・親にあたるクラスを基本クラス、子にあたるクラスを派生クラスという ・よって、派生クラスは基本クラスを継承する ・派生クラスの定義時に基本クラス名を指定するだけで、基本クラスにあるメンバが(ほぼ)すべて継承される ・しかも、基本クラスを書き換えると、継承内容も書き変わるので、修正が自動反映する ・よって、派生クラスでは独自のメンバのみ記述すれば良い  例:  ①スライムクラスにHPと戦い方を定義  ②スライムクラスを継承したホイミスライムクラスにMPと呪文を定義(HPと戦い方は継承されるので記述不要) ・派生クラスを継承する派生の派生クラスも記述でき、基本クラスと派生クラスの両方から継承する ・なお、C#等では2つ以上の基本クラスを持つこと(多重継承)は禁止 ・逆に、2つ以上の派生クラスを持つことは可能 ・継承をインヘリタンスともいう p.223(クラスの継承) ・定義書式: class 派生クラス名 : 基本クラス名 {…} ・なお、基本クラスにおいてprivate指定のメンバは継承されない p.224 inheritance01.cs //p.224 inheritance01.cs using System; //基本クラス class MyBase {     public int a = 10; //継承可能なデータメンバ     public void BaseMethod() { //継承可能なメソッド         Console.WriteLine("ここは基本クラスです");     } } //派生クラス class MyDerived : MyBase { //MyBaseを基本クラスとする派生クラス     //ここに「public int a = 10;」が継承される     //ここに「public void BaseMethod() {…}」が継承される     public int b = 20; //追加のデータメンバ     public void DerivedMethod() { //追加のメソッド         Console.WriteLine("ここは派生クラスです");     } } class inheritance01 {     public static void Main() {         MyDerived md = new MyDerived(); //派生クラスのインスタンスを生成         md.BaseMethod(); //継承したメソッドが派生クラスのインスタンスにある         md.DerivedMethod(); //追加のメソッドも派生クラスのインスタンスにある         Console.WriteLine("md.a = {0}", md.a); //継承したデータメンバが派生クラスのインスタンスにある         Console.WriteLine("md.b = {0}", md.b); //追加のデータメンバも派生クラスのインスタンスにある         MyBase mb =…

Read the full article

講義メモ

・p.212「インデクサ」の補足とp.213「index01.cs」から p.212 インデクサ(再掲載) ・主にデータメンバである配列等をプロパティと同様に扱う仕掛けがインデクサ ・プロパティとは異なり、インデクサには名前がなく「インスタンスの参照変数[添字]」の形式で、配列の要素を扱える ・定義書式: public 型 this[インデックス型 インデックス] { get {…; return 値や式;} set {…;} }  ※ 型は扱いたい配列等に合わせる  ※ getの中において配列等の要素[インデックス]の値を返す  ※ setの中では外部から与えられる値をvalueキーワードで得ることができ、通常、これを要素[インデックス]に代入 ・基本的な定義書式: public 型 this[int i] { get {return 配列名[i];} set {配列名[i] = value;} } ・代入式の左辺に参照変数[添字]を指定すると、setの内容が実行される。例:参照変数[0] = 値; ・代入式の左辺以外に参照変数[添字]を指定すると、getの内容が実行される。例:Console.Write(参照変数[0]); p.213 indexer01.cs //p.213 indexer01.cs using System; class MyClass {     string[] name = new string[5]; //インデクサで扱いたい配列     public string this[int i] { //インデクサの定義(インデックスは整数のi)         get { return name[i]; }         set { name[i] = value; }     } } class indexer01 {     public static void Main() {         MyClass mc = new MyClass();         mc[0] = "一郎"; //インデクサ経由でname[0]に代入         mc[1] = "次郎"; //インデクサ経由でname[1]に代入         mc[2] = "三郎"; //インデクサ経由でname[2]に代入         mc[3] = "四郎"; //インデクサ経由でname[3]に代入         mc[4] = "五郎"; //インデクサ経由でname[4]に代入         for…

Read the full article