2011-07-01 73 views
1

好了,所以這是鍛鍊:多態性 - 運動

定義一個名爲學生類,包含三個年級的學生 。 該課程將具有 計算平均成績的功能。現在, 定義一個類名爲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

請告訴我你的問題? –

+0

真的不知道在主課堂中該做什麼,我該如何執行這個安排,而且我想知道這樣做的好處,讓我知道如果我迄今有錯誤,非常感謝。 –

+0

你是否通過編譯器來運行它?它抱怨Student.Average()嗎? – jimreed

回答

0

OK:我想這是他們正在尋找的東西,雖然是英文有點舉步維艱:

1)聲明變量學生

Student s; 

2)聲明Student1對象

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

3)執行對象到變量的放置:

s = s1; 

4)運行的功能(注意,你必須演員到Student1類型訪問類型的具體功能和)

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

準確地說,你能告訴我請做什麼性能的點:將對象放置到變量? –

+0

順便說一句,你可以告訴我,如果他們會告訴我執行對象的變量放置,我必須做些什麼? –

+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的對象。執行將對象放置到變量並運行student1的功能。 –

+0

恐怕你的答案似乎沒有做什麼要求。 –

+0

@ErickPetru哦,我明白了,但你能告訴我執行這種替換有什麼好處嗎? –

1

我在代碼中從OOP視角看到的主要缺陷是讓Student1從Student延伸出來。在使用繼承時,確保它是一個真正的擴展(是)。通過製作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

我參加了一本書的練習lol –

+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(); 

}