質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.21%

C# クラスの継承について

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 845

niconicodryyy

score 32

using System;

class Book
{
    public string title;
    public string genre;

    public void printBook()
    {
        Console.WriteLine("タイトル:" + title);
        Console.WriteLine("ジャンル:" + genre);
    }
}

class Novel : Book
{
    public string writer;
    public void printNov()
    {
        printBook();
        Console.WriteLine("著者:" + writer);
    }
}

class Magazine : Book
{
    public int day;
    public void printMag()
    {
        printBook();
        Console.WriteLine("発売日 :" + day + "日");
    }
}

class Bookshelf
{
    public static void Main()
    {
        Novel nov = new Novel();
        nov.title = "しおりの秘境発見";
        nov.genre = "ファンタジー";
        nov.writer = "アンク";

        Magazine mag = new Magazine();
        mag.title = "月間C#no絵本";
        mag.day = 20;

        nov.printNov();
        Console.WriteLine();
        mag.printMag();
    }
}


上記のコードはテキストC#の絵本より抜粋しております。
独学で勉強していますが、クラスで行き詰まっていますのでお力をお借りしたいです。

下から }を抜いた3行

      nov.printNov();...1
        Console.WriteLine();...2
        mag.printMag();...3


は何の為にあるのでしょうか?

それぞれのクラスに Console.WriteLineとあるので無くても表示されると思いましたが
この1と3が無いと表示されません。
また2はあってもなくても表示されますが、わかりやすくする為に書いてるもので本来はいらないものなのでしょうか?

ご教授お願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2019/05/09 16:44

    そのあたりを解説してないような絵本をやめてちゃんとした本を読んだ方がいいと思います。

    キャンセル

  • Zuishin

    2019/05/09 16:53 編集

    本の丸写しにしてはコードが良くないので評価を調べてみましたが、あまり良い本とは言えないようです。
    https://www.amazon.co.jp/C-%E3%81%AE%E7%B5%B5%E6%9C%AC-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%A2%E3%83%B3%E3%82%AF-ebook/dp/B00NV5L802
    コメントを読んでみてください。

    キャンセル

  • niconicodryyy

    2019/05/10 09:05

    ご丁寧にありがとうございます。
    知識が0から始めたいと思い購入しましたが、確かに知識としてではなくイメージとしての本ってコメントがしっくり来ました。
    何か自分に合ういい書籍を探してみます。

    キャンセル

  • Zuishin

    2019/05/10 10:25

    イメージにしてもコードがへたくそすぎます。
    初心者向けの本ではなく初心者が書いた本です。
    著者名も法人ですし、その辺からバイトでも雇って安く書かせたんでしょう。

    キャンセル

回答 3

checkベストアンサー

+2

回答にするか迷いましたが、書きます。

継承の前に、

  • オブジェクト指向
  • クラスとインスタンス
  • メンバー(フィールド、プロパティ、メソッドなど)

辺りの勉強が先だと思います。
この辺りの理解が曖昧だと今回のような質問が出来上がります。

このコード以前に理解できていない部分が他にもあるのではありませんか?

        nov.printNov();
        Console.WriteLine();
        mag.printMag();

例えば、以下2つのコードについて(実際に返信はされなくても構いませんが)説明をしてみてください。

class Bookshelf
{
    public static void Main()
    {
        Novel nov = new Novel();
        nov.title = "しおりの秘境発見";
        nov.genre = "ファンタジー";
        nov.writer = "アンク";

        Magazine mag = new Magazine();
        mag.title = "月間C#no絵本";
        mag.day = 20;

        nov.printNov();
        Console.WriteLine();
        mag.printMag();
    }
}
class Book
{
    public string title;
    public string genre;

    public void printBook()
    {
        Console.WriteLine("タイトル:" + title);
        Console.WriteLine("ジャンル:" + genre);
    }
}

どうでしょう、説明できましたか?

説明できなかった場合

まずは説明が出来るレベルまで、公式ドキュメントや解説サイト、参考書を見て学びましょう。
でなければ理解は深められません。

説明できるようになってきたらこのまま下の文章を読んでください。

説明できた場合

質問です。
以下のコードについて、きちんと説明はできましたか。

  • class Bookshelf{~}
  • nov.title = "しおりの秘境発見";
  • public static void Main(){~}
  • Novel nov = new Novel();
  • Console.WriteLine();
  • public string title;
  • public void printBook(){~}

次に、その説明が正しいとされる根拠・出典を示してみましょう。
可能なら公式ドキュメントから抜粋できれば良いですが、サイトや教材でもひとまずは構いません。
示せましたか。

ここまでの工程が理解しているか否かの最低ラインだと私は思っています。

結論

話を戻しますが、前提の理解が足りていれば今回の質問は恐らく出てこないはずです。
今まで内容をまとめると次の2点になります。

  • 新しいことを学ぶ前に前提の理解が深められているか確認をする
  • その方法の一つは「正しい根拠を持った説明を誰かにすること」

適切に理解を深めるヒントになるはずなので、上記2点を是非心掛けてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

それぞれのクラスに Console.WriteLineとあるので無くても表示されると思いましたが
この1と3が無いと表示されません。

メソッド」の機能は理解されていますでしょうか?
たしかにそれぞれのクラスに Console.WriteLine と記述されていますが、メソッドを呼び出さなければ実行されません。

また2はあってもなくても表示されますが、わかりやすくする為に書いてるもので本来はいらないものなのでしょうか?

これは改行を入れて見やすくしているだけですね。
この行だけコメントアウトして実行結果を見比べてみると分かると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/10 09:12

    2の使い方はわかりましたが、おっしゃられる通りメソッドについての知識が曖昧ですしまた、引数についても理解が追いついていませんのでもう少し深く学習したいと思います。ありがとうございます。

    キャンセル

  • 2019/05/10 09:52 編集

    よく、classは設計図だといわれます。
    あくまで設計図なので、
    それを元に実体を作成して、
      Novel nov = new Novel();
    パラメーターを設定し、
      nov.title = "しおりの秘境発見";
    スイッチを押して、処理を実行する
      nov.printNov();

    厳密には違うかもしれませんし、もっと複雑でしょうけど・・・。

    キャンセル

-10

それぞれのクラスに Console.WriteLineとあるので無くても表示されると思いましたが
この1と3が無いと表示されません。

引数についても理解が追いついていません

と発言されていたので、そもそも関数というものをあまり理解していないと感じました。
ここを参考にして理解を深めておいて下さい。

あと、magのgenreはしっかりと初期化しましょう。C#なら大丈夫ですが他の言語ではだめという場合もありますよ。
プログラムの基本は初期化解放更新描画です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/10 12:54

    >結果的に私は恨まれるかも知れませんが、責任にはなりません。
    それは無責任です。
    回答者が直接責任を負うことはありませんが、一技術者として回答内容には責任を持ってください。

    キャンセル

  • 2019/05/10 13:50 編集

    > 回答者が直接責任を負うことはありませんが、一技術者として回答内容には責任を持ってください。
    確かにその意見はもっともですね。一つ目のリンクはまだいいとしても、二つ目のリンクは消しておきましょう。話をややこしただけでした。

    キャンセル

  • 2019/05/10 16:07

    いや一つ目も二つ目もどっちも論外です。

    プログラミングの基本が「初期化、解放、更新、描画」というのも「なんだその珍説?」ですし、初期化がすでに済んでいるものを「しっかり初期化しましょう」というのも「別にしてもいいけどそれ二度手間」としか。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る