Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 24.03.2015
Сообщений: 206
1

Полиморфизм

29.05.2016, 15:26. Показов 1477. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень нужна помощь, запутался. Есть студент и студент-контрактник. При выводе информации у меня стипендия всегда = 0. У студента-контрактника так и должно быть, а у просто студента зависит от мин. балла.
Класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 class Student
    {
        public string FIO;
        public string fakultet;
        public double kurs;
        public double min_ball;
        public double Second_kurs;
        public  double Stipendia;
        
 
        public Student(string FIO, string fakultet, double kurs, double min_ball, double Second_kurs, double Stipendia)
        {
            this.FIO = FIO;
            this.fakultet = fakultet;
            this.kurs = kurs;
            this.min_ball = min_ball;
            this.Stipendia = 0;
            this.Second_kurs = 0;
        }
 
        public virtual double Second_kurs1()
        {
            if (min_ball >= 3) Second_kurs = kurs+1;
        return Second_kurs;
        }
 
        public virtual double Stipendia1()
        {
            if (min_ball <= 3)
                Stipendia = 0;
            else if (min_ball == 4)
                Stipendia = 200;
            else if (min_ball == 5)
                Stipendia = 300;
            return Stipendia;
        }
 
        public string Info()
        {
 
            string s = ("ФИО:\t" + FIO + "\nФакультет:\t" + fakultet + "\nкурс\t" + kurs + "\nминимальная оценка:\t" + min_ball + "\nСледующий курс\t" + Second_kurs + "\nСтипендия:\t" + Stipendia);
            return s;
        }
    }
 
    class Student_kontractnik : Student
    {
        public int Contract=0;
        public Student_kontractnik(string FIO, string fakultet, double kurs, double min_ball, double Second_kurs, double Stipendia, int Contract)
            : base(FIO, fakultet, kurs, min_ball, Second_kurs, Stipendia)
        {
 
        }
        public override double Second_kurs1()
        {
            if ((min_ball >= 3) || (Contract == 1)) Second_kurs = kurs + 1;
            else Second_kurs = kurs;
            return Second_kurs;
        }
        public string Infoo()
        {
            string s2 = ("ФИО:\t" + FIO + "\nФакультет:\t" + fakultet + "\nкурс\t" + kurs + "\nминимальная оценка:\t" + min_ball + "\nСледующий курс\t" + Second_kurs + "\nСтипендия:\t" + Stipendia + "\nУплачено за контракт:\t" + Contract);
            return s2;
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = null;
            string FIO = textBox1.Text;
            string fakultet = textBox2.Text;
            double kurs = 0;
            int Contract = 0;
            double Stipendia = 0;
            double min_ball = 0;
            double Second_kurs=0;
            string s=null;
            string s2=null;
            try
            {
                kurs = Convert.ToDouble(textBox3.Text);
                min_ball = Convert.ToDouble(textBox4.Text);
            }
            catch (FormatException) { MessageBox.Show("Ошибка формата данных"); }
            switch (type)
            {
                case 1:
                    richTextBox1.Text = "Тип:\tСтудент\n";
                    Student o1 = new Student(FIO, fakultet, kurs, min_ball, Second_kurs, Stipendia);
                    Second_kurs = o1.Second_kurs1();
                    Stipendia = o1.Stipendia1();
                    s = o1.Info();
                    break;
                case 2:
                    richTextBox1.Text = "Тип:\tСтудент-Контрактник\n";
                    Student_kontractnik o2 = new Student_kontractnik(FIO, fakultet, kurs, min_ball, Second_kurs, Stipendia, Contract);
                    Second_kurs = o2.Second_kurs1();
                    s2 = o2.Infoo();
                    break;
            }
            richTextBox1.Text += s;
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2016, 15:26
Ответы с готовыми решениями:

Реализация классов прямоугольник, окружность и квадрат + полиморфизм
Создать базовый класс фигура, на основе базового класса создать производные классы: прямоугольник,...

Классы, наследование, полиморфизм и инкапсуляция: нужен пример использования
Пожалуйста , у кого есть приложение где задействованы классы. а именно наследование , полиморфизм и...

Полиморфизм.
Доброго времени суток. Если задача : При запуске приложение показывает окно фиксированного...

C#, полиморфизм.
Я пытаюсь сделать редактор объекта. Выглядеть это долно как-то так: foreach( PropertyInfo p in...

8
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
29.05.2016, 20:01 2
T-Tim,

Может так будет лучше:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
    class Student
    {
        public string FIO { get; set; }
        public string fakultet { get; set; }
        public double kurs { get; set; }
        public double min_ball { get; set; }
        public double Second_kurs { get; set; }
 
        public Student(string FIO, string fakultet, double kurs, double min_ball, double Second_kurs)
        {
            this.FIO = FIO;
            this.fakultet = fakultet;
            this.kurs = kurs;
            this.min_ball = min_ball;
            this.Second_kurs = 0;
        }
 
        public virtual double Stipendia
        {
            get
            {
                double stipendia = 0;
 
                if (min_ball == 4)
                    stipendia = 200;
                else if (min_ball == 5)
                    stipendia = 300;
 
                return stipendia;
            }
        }
 
        public virtual string Info
        {
            get
            {
                return ("ФИО:\t" + FIO + "\nФакультет:\t" + fakultet + "\nкурс\t" + kurs + "\nминимальная оценка:\t" + min_ball + "\nСледующий курс\t" + Second_kurs + "\nСтипендия:\t" + Stipendia);
            }
        }
 
        public virtual double Second_kurs1()
        {
            if (min_ball >= 3) 
                Second_kurs = kurs + 1;
            return Second_kurs;
        }
    }
 
    class Student_kontractnik : Student
    {
        public int Contract { get; set; }
 
        public Student_kontractnik(string FIO, string fakultet, double kurs, double min_ball, double Second_kurs, int Contract)
            : base(FIO, fakultet, kurs, min_ball, Second_kurs)
        {
 
        }
 
        public override double Stipendia
        {
            get
            {
                return 0;
            }
        }
 
        public override string Info
        {
            get
            {
                return base.Info + "\nУплачено за контракт:\t" + Contract;
            }
        }
 
        public override double Second_kurs1()
        {
            if ((min_ball >= 3) || (Contract == 1))
                Second_kurs = kurs + 1;
            else
                Second_kurs = kurs;
 
            return Second_kurs;
        }
    }
Хотя не очень понятно, зачем из-за одного контракта городить целое наследование. Разве что задача учебная. Тогда да.
0
1 / 1 / 0
Регистрация: 24.03.2015
Сообщений: 206
30.05.2016, 09:03  [ТС] 3
Информацию о студенте теперь выводит, спасибо. Студент-контрактник - ничего не выводит
0
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
30.05.2016, 10:52 4
T-Tim,

C#
1
2
3
4
5
6
7
            public override string Info
            {
                get
                {
                    return ("ФИО:\t" + FIO + "\nФакультет:\t" + fakultet + "\nкурс\t" + kurs + "\nминимальная оценка:\t" + min_ball + "\nСледующий курс\t" + Second_kurs + "\nСтипендия:\t" + Stipendia + "\nУплачено за контракт:\t" + Contract);
                }
            }
0
1 / 1 / 0
Регистрация: 24.03.2015
Сообщений: 206
31.05.2016, 20:07  [ТС] 5
Всё равно пусто. В конструкторе ведь правильный код?(32 строчка)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = null;
            string FIO = textBox1.Text;
            string fakultet = textBox2.Text;
            double kurs = 0;
            int Contract = 0;
            double Stipendia = 0;
            double min_ball = 0;
            double Second_kurs=0;
            string s=null;
            string s2=null;
            try
            {
                kurs = Convert.ToDouble(textBox3.Text);
                min_ball = Convert.ToDouble(textBox4.Text);
            }
            catch (FormatException) { MessageBox.Show("Ошибка формата данных"); }
            switch (type)
            {
                case 1:
                    richTextBox1.Text = "Тип:\tСтудент\n";
                    Student o1 = new Student(FIO, fakultet, kurs, min_ball, Second_kurs);
                    Second_kurs = o1.Second_kurs1();
                    Stipendia = o1.Stipendia;
                    s = o1.Info;
                    break;
                case 2:
                    richTextBox1.Text = "Тип:\tСтудент-Контрактник\n";
                    Student_kontractnik o2 = new Student_kontractnik(FIO, fakultet, kurs, min_ball, Second_kurs, Contract);
                    Second_kurs = o2.Second_kurs1();
                    s2 = o2.Info;
                    break;
            }
            richTextBox1.Text += s;
        }
0
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
31.05.2016, 21:33 6
Цитата Сообщение от T-Tim Посмотреть сообщение
Всё равно пусто
Имеется в виду, что после выполнения
C#
1
s2 = o2.Info;
в s2 пустота?
P.S. Сейчас заметил - в конструкторе контрактника не инициализурется Contract.
0
1 / 1 / 0
Регистрация: 24.03.2015
Сообщений: 206
31.05.2016, 21:58  [ТС] 7
выводит лишь Тип: Студент-контрактник, дальше пусто
0
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
31.05.2016, 22:20 8
Лучший ответ Сообщение было отмечено T-Tim как решение

Решение

Цитата Сообщение от T-Tim Посмотреть сообщение
выводит лишь Тип: Студент-контрактник, дальше пусто
Если под "выводит" имеется в виду, что вывод осуществляется в richTextBox1, то в case 2: Вам нужно написать так:

C#
1
s = o2.Info;
поскольку дальше по коду у Вас так:

C#
1
richTextBox1.Text += s;
1
1 / 1 / 0
Регистрация: 24.03.2015
Сообщений: 206
31.05.2016, 22:24  [ТС] 9
Спасибо, теперь всё работает правильно. Пойду анализировать свои ошибки)
0
31.05.2016, 22:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2016, 22:24
Помогаю со студенческими работами здесь

Полиморфизм
Никак не пойму, как применить этот полиморфизм...Покажите пожалуйста пример с его использованием.

Наследование и полиморфизм
Наследование и полиморфизм

Полиморфизм, возможно ли вывести значение по конкретному свойству класса?
Имеется простенькая программа: public class Person { public string name { get; set;...

полиморфизм
дайте пжл какие-нибудь источники по данному виду кодинга (статьи, книги, посты на форуме), буду...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru