Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 4
1

Переопределение методов класса object

14.06.2014, 18:28. Показов 3116. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Написала программу, но в коде есть ошибка. Не могу ее найти. Помогите мне, пожалуйста!

Условие:
Создать класс с закрытыми полями а и b, строковой переменной,
означающей операцию и свойством С. Свойство - значение выражения над
полями а и b (выражение и типы полей - см. в таблице 1). Поля
инициализировать при создании объекта. Выполнить переопределение метода
Equals(с одним и двумя параметрами) для сравнения объектов и метода
ToString()для вывода состояния объекта.
В программе должна выполняться проверка всех разработанных
элементов класса.

Тип полей а, b: int;
Выражения: --,++,/
Равенство объектов: По свойству С для всех операций;

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
 
namespace ConsoleApplication1
{
 
    class MyClass
    {
 
        int a, b;
        string op;
 
        public int A
        {
            get
            {
                return a;
            }
            set
            {
                a = value;
            }
        }
        public int B
        {
            get
            {
                return b;
            }
            set
            {
                b = value;
            }
        }
        public string OP
        {
            get
            {
                return op;
            }
            set
            {
                op = value;
            }
        }
 
        public int C
        {
            get
            {
                switch (op)
                {
                    case "++": { a++; return a; }
 
                    case "--": { a--; return a; }
                    case "/":
                        return a / b;
                    default:
                        return 0;
                }
            }
        }
 
        public MyClass(int a, int b, string op)
        {
            this.a = a;
            this.b = b;
            this.op = op;
        }
 
        public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
                return false;
            MyClass temp = (MyClass)obj;
            return C == temp.C; // возвращаем результат сравнения 
        }
 
        new public bool Equals(object obj1, object obj2)
        {
            if ((obj1 == null || GetType() != obj1.GetType()) || (obj2 == null || GetType() != obj2.GetType()))
                return false;
            MyClass temp1 = (MyClass)obj1;
            MyClass temp2 = (MyClass)obj2;
            return temp1.C == temp2.C; // возвращаем результат сравнения
        }
 
        public override int GetHashCode()
        {
            return op.GetHashCode();
        }
 
        public override string ToString()
        {
            return string.Format("MyClass\t a = {0}\t b = {1}\t операция: {2}", a, b, op);
        }
    }
    class Program
    {
 
        public static void Main()
        {
            Console.WriteLine("Введите a1 и b1:");
            int a1 = int.Parse(Console.ReadLine());
            int b1 = int.Parse(Console.ReadLine());
            Console.WriteLine("Введите операцию ++, — или /");
            string op1 = Console.ReadLine();
            Console.WriteLine("Введите a2 и b2:");
            int a2 = int.Parse(Console.ReadLine());
            int b2 = int.Parse(Console.ReadLine());
            Console.WriteLine("Введите операцию ++, — или /");
            string op2 = Console.ReadLine();
            MyClass mc1 = new MyClass(a1, b1, op1);
            MyClass mc2 = new MyClass(a2, b2, op2);
            Console.WriteLine(mc1);
            Console.WriteLine(mc2);
            Console.WriteLine("Результат операции: {0} {1} {2} = {3}", mc1.A, mc1.OP, mc1.B, mc1.C);
            Console.WriteLine("Результат операции: {0} {1} {2} = {3}", mc2.A, mc2.OP, mc2.B, mc2.C);
 
            if (mc1 == mc2) Console.WriteLine(" Объекты равны");
            else Console.WriteLine(" Объекты не равны");
 
            if (mc1.Equals(mc2))
                Console.WriteLine("Объекты равны");
            else
                Console.WriteLine("Объекты не равны");
            if (Equals(mc1, mc2))
                Console.WriteLine("Объекты равны");
            else
                Console.WriteLine("Объекты не равны");
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2014, 18:28
Ответы с готовыми решениями:

Переопределение методов класса - потомка
Подскажите, где можно почитать про это? На msdn теории особо нет.

Перегрузка операций с использованием стандартных интерфейсов и методов класса Object
Класс “Материнская плата”. Поля – имя, марка, объем ОП, стоимость.Правилами форума запрещено...

Переопределение методов
Помогите пожалуйста.Почему мои войны не получают урон? namespace ConsoleApplication1 { ...

Сокрытие и переопределение методов
Объясните на понятном языке: 1. В чём основная разница между сокрытием и переопределением методов?...

3
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
14.06.2014, 18:34 2
в чем ошибка?
и зачем сравнивать свойство C ?
0
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 4
14.06.2014, 18:54  [ТС] 3
Цитата Сообщение от Metall_Version Посмотреть сообщение
в чем ошибка?
Операции ++ и -- выполняются неверно, при ++ вообще не понятно, как подсчет происходит, а при -- в ответе получается 0 всегда.

Цитата Сообщение от Metall_Version Посмотреть сообщение
и зачем сравнивать свойство C ?
В моем задании написано именно так, как я описала в первом своем сообщении. Понятия не имею, зачем это. Преподаватель требует.
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
14.06.2014, 19:17 4
kristinaya, во первых в гетере нельзя изменять состояние объекта .. это противоречит логике. этот гетер в процессе вызывается много раз и значение "а" у вас каждый раз изменяется...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            get
            {
                switch (op)
                {
                    case "++": return a + 1;
 
                    case "--": return a - 1;
                    case "/":
                        return a / b;
                    default:
                        return 0;
                }
            }
Добавлено через 1 минуту
во вторых операция -- работает
вы наверное не ту команду вводите
C#
1
Console.WriteLine("Введите операцию ++, - или /")
просите ввести один дефис "-" , а нужно два "--"
0
14.06.2014, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2014, 19:17
Помогаю со студенческими работами здесь

Наследование и переопределение виртуальных методов
Здравствуйте уважаемые программисты. Помогите разобраться с наследованием и переопределением...

Замещение методов System.Object.
using System; using System.Text; class Person { public Person(string fname, string iname,...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием "Реализовать ввод исходных данных, расчет и вывод...

Наследование,переопределение методов[рефлексия]
Раньше я практически не сталкивался с рефлексией, но теперь появилась острая проблема .Загружаю...


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

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