2011-07-01 6 views
1

さてさて、そう、これは運動です:ポリモーフィズム - 運動

は、学生の3つの段階を含む、学生という名前のクラスを定義します。 クラスには、 が成績平均を計算する関数があります。さて、 は が学生から導出され、 タイプ STUDENT1の 学生変数やオブジェクトを定義し、 grades.Inの合計にメインプログラムを計算する機能が追加されますSTUDENT1という名前のクラスを定義します。 オブジェクトの変数への配置を実行し、student1の 関数を実行します。

注:これは宿題ではなく、私はこれを自分で学習しています。 これはコードです:私は本当にメインクラスで何をするか分からない

class Student 
{ 
    protected int grade1, grade2, grade3; 
    public Student(int grade1, int grade2, int grade3) 
    { 
     this.grade1 = grade1; 
     this.grade2 = grade2; 
     this.grade3 = grade3; 
    } 
    public double Average() 
    { 
     return (grade1 + grade2 + grade3)/3; 
    } 
} 
class Student1 : Student 
{ 
    public Student1(int grade1, int grade2, int grade3) 
     : base(grade1, grade2, grade3) 
    { 
    } 
    public double Sum() 
    { 
     return grade1 + grade2 + grade3; 
    } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
    } 
} 

、私はこの配置を実行してくださいどのようにも、私はそれをやっての利点は何を知りたいと思った、私に知らせてこれまでに間違いがあった場合は、ありがとう。運動によって記述された、まさに後

+0

いただきましたご質問へのアクセスにSTUDENT1型にSをキャストする必要があります注意してください? –

+0

メインクラスで何をすべきかわからない、どうやってこのプレースメントを実行するのですか? –

+0

コンパイラでこれを実行しましたか?それは、Student.Average()について文句を言ったのですか? – jimreed

答えて

0

OK:私は英語が少しropeyですが、これは、彼らが探しているものだと思い:

1)学生変数

Student s; 

2を宣言します)STUDENT1オブジェクトを宣言

Student1 s1 = new Student1(1,2,3); 

3)変数へのオブジェクトの配置を実行します。

s = s1; 

4)機能を実行します(あなたはタイプ特定の関数の合計)

Console.WriteLine(((Student1)s).Sum()); 
+0

正確には、このパフォーマンスを行う点は何ですか?オブジェクトの変数への配置を教えてください。 –

+0

Btwあなたがオブジェクトへの変数の配置を実行するように私に言われたらどうすればいいのか教えてください。 –

+0

私はこの演習のポイントを少しは見ていません - これはオブジェクトオリエンテッドデザインの良い例ではありません - 私のアドバイスはより良い本を得ることです! – BonyT

1

// Define a student variable. 
Student s; 

// And object of type Student1. 
Student1 s1 = new Student1(10, 5, 8); 

// Perform placement of the object to variable. 
s = s1; 

// And run the function of Student1. 
// But it makes no sense... 
s1.Sum(); 

// Maybe the exercise wants it: 
((Student1)s).Sum(); 

// Which makes no sense too, since is making an idiot cast. 
// But for learning purposes, ok. 

まあ、私はこの練習がpolymorphism in C#のいずれかの利点を取っているとは思いません。実際の使用例を見るためにリンクを読むことをお勧めします。

+0

彼らはこれを求めました:、student1というタイプのstudent変数とobjectを定義します。変数へのオブジェクトの配置を実行し、student1の関数を実行します。 –

+0

あなたの答えが尋ねられたことをしていないように思われます。 –

+0

@ErickPetruああ、私は理解していますが、この交換を行うことのメリットは何ですか? –

1

OOPの観点から私があなたのコードで見る主な欠陥は、Student1をStudentから継承させることです。継承を使用する場合は、それが真の拡張子(a)であることを確認してください。あなたは、1つの学生クラスを作成し、合計と平均の方法を実装することでより効果的になります。

OOPの観点からは、以下のことで十分だと思います。

class Student 
{ 
    protected int grade1, grade2, grade3; 

    public Student(int grade1, int grade2, int grade3) 
    { 
     this.grade1 = grade1; 
     this.grade2 = grade2; 
     this.grade3 = grade3; 
    } 

    public double Average() 
    { 
     return (grade1 + grade2 + grade3)/3; 
    } 

    public double Sum() 
    { 
     return grade1 + grade2 + grade3; 
    } 
} 
+0

私は本の練習をしました。 –

+0

文法などの基礎を教えようとしていると確信しています。もしあなたが新しくなったら、OOPの原則、特に構成を学ぶ時間を取ってください。リッチリッチ! – tjg184

+0

私はこの本を通して学んでいます。私はすでに相続財産を学んでいます。どうしたらいいですか? –

1

多分これは私の目に本当にひどく言われていますが。

メインプログラムで、student1というタイプの生徒変数とオブジェクトを定義します。変数へのオブジェクトの配置を実行し、student1の関数を実行します。

static void Main(string[] args) 
{ 
    //define a student variable and object of type student1. 
    Student student = new Student1(100, 99, 98); 

    //Perform placement of the object to variable and run the function of student1 
    var sum = ((Student1)student).Sum(); 

}