Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
olli_
0 / 0 / 0
Регистрация: 06.02.2017
Сообщений: 7
#1

Разработать класс содержащий перегрузку операторов - C#

06.02.2017, 18:13. Просмотров 313. Ответов 8
Метки нет (Все метки)

Создать класс Money, содержащий следующие члены класса:

+1. Поля:
•int first;//номинал купюры
•int second; //количество купюр

+2. Конструктор, позволяющий создать экземпляр класса с заданными значениям полей.

+3. Методы, позволяющие:
•вывести номинал и количество купюр;
•определить, хватит ли денежных средств на покупку товара на сумму N рублей.
•определить, сколько штук товара стоимости n рублей можно купить на имеющиеся денежные средства.

+4. Свойство:
•позволяющее получить - установить значение полей (доступное для чтения и записи);
•позволяющее расчитатать сумму денег (доступное только для чтения).

+5. Индексатор, позволяющий по индексу 0 обращаться к полю first, по индексу 1 – к полю second, при других значениях индекса выдается сообщение об ошибке.

+-6. Перегрузку:
•операции ++ (--): одновременно увеличивает (уменьшает) значение полей first и second;
•операции !: возвращает значение true, если поле second не нулевое, иначе false;
•операции бинарный +: добавляет к значению поля second значение скаляра.

Добавлено через 50 секунд
У меня получилось так:
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
133
134
135
136
137
138
139
140
141
142
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
 
namespace prakt_10
{
    class Program
    {
        class Money
        {
            private int first;
            private int second;
 
            public Money(int first, int second)
            {
                this.first = first;
                this.second = second;
            }
 
            // methods
            public void Show()
            {
                Console.WriteLine("first: {0}, second: {1}", this.first, this.second);
            }
 
            public void Enough_Deficiency(int price)        // enough or not enough
            {
                if (this.first * this.second >= price)
                {
                    Console.WriteLine("Enough funds.");
 
                    double numObj = this.first * this.second / price;
                    numObj = Convert.ToInt16(Math.Floor(numObj));       // rounded <-
 
                    Console.WriteLine("Funds enough to buy {0} objects", numObj);
                }
 
                else
                {
                    Console.WriteLine("Insufficiently!");
                }
            }
 
            // properties
            public int values_first
            {
                get { return this.first; }
                set { this.first = value; }
            }
 
            public int values_second
            {
                get { return this.second; }
                set { this.second = value; }
            }
 
            public int Cash
            {
                get { return this.first * this.second; }
            }
 
            public int this[int i]
            {
                get
                {
                    if (i == 0)
                    { return this.first; }
 
                    else
                    {
                        if (i == 1)
                        { return this.second; }
 
                        else
                        { 
                            Console.WriteLine("Error! Invalid index.");
                            return -1;
                        }
                    }
                }
 
            }
        }
 
        // owerload
        /*
        public static Money operator ++(Money M)
        {
            Money M1 = new Money(M.values_first *= 10, M.values_second *= 10);
            return M1;
        }
 
        public static Money operator --(Money M)
        {
            Money M1 = new Money(M.values_first /= 10, M.values_second /= 10);
            return M1;
        }
        
        public static Money operator !(Money M)
        {
            bool cash = false;
            if (M.values_second > 0)
            {
                cash = true;
            }
            
            return cash;
        }
 
        public static Money operator +(Money M, int skal)
        {
            Money M1 = new Money(M.values_first, M.values_second * skal);
            return M1;
        }
        */
 
 
 
        static void Main(string[] args)
        {
            int first = int.Parse(Console.ReadLine());
            int second = int.Parse(Console.ReadLine());
            int price = int.Parse(Console.ReadLine());
 
            Money M1 = new Money(first, second);
 
            // tests
            M1.Show();
            M1.Enough_Deficiency(price);
            Console.WriteLine(M1.Cash);
 
            M1.values_first = 100;
            M1.values_second = 100;
            M1.Show();
 
            Console.ReadKey();
        }
    }
}
Добавлено через 1 минуту
Не могу понять в чем ошибка перегрузки операторов. Помогите плиз, как исправить?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2017, 18:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разработать класс содержащий перегрузку операторов (C#):

Создать класс, реализующий перегрузку операторов, разработать оконное приложение для работы с методами класса - C#
Помоготите кто может)))пожалуйста) Цель работы: Познакомиться с принципами перегрузки операторов в ЯП С#. Создать класс, реализующий...

Описать класс треугольник, методы — площадь, периметр, вывод; реализовать перегрузку операторов - C#
Всем привет. Помогите разобраться. В задании описать класс треугольник, методы - площадь, периметр, вывод, перегрузку операторов +, * и =....

Разработать класс Template, содержащий конструктор и метод Render - C#
Подскажите, пожалуйста, в какой последовательности выполнять это задание(сначала пишем это, потом добавляем то, потом еще что-то), и...

Требуется разработать класс Template, содержащий конструктор и метод Render - C#
Требуется разработать (.NET, C#) класс Template, содержащий конструктор и метод Render. Конструктор принимает следующие параметры: ...

Cделать перегрузку операторов массивов - C#
Ребят проблема мучает уже 3-ий день. Не могу решить. Задано 2 массива char '1' '2' '3' и '4' '5' '6' Мне надо сделать...

Разработать класс коллекций Employee, содержащий в себе информацию о работниках фирмы - C#
Вам поручили разработать класс коллекций Employee, содержащий в себе информацию о работниках фирмы. Одним из требований, предъявленных к...

8
Tyoma
51 / 51 / 8
Регистрация: 12.05.2010
Сообщений: 167
Завершенные тесты: 3
06.02.2017, 18:37 #2
А Вы объявляете метод ++ и др. вне класса Money?
0
olli_
0 / 0 / 0
Регистрация: 06.02.2017
Сообщений: 7
06.02.2017, 18:39  [ТС] #3
В самом классе
0
Tyoma
51 / 51 / 8
Регистрация: 12.05.2010
Сообщений: 167
Завершенные тесты: 3
06.02.2017, 18:41 #4
Цитата Сообщение от olli_ Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
        public static Money operator !(Money M)
        {
            bool cash = false;
            if (M.values_second > 0)
            {
                cash = true;
            }
            
            return cash;
        }
Вы пытаетесь вернуть bool, а у метода объявлено Money
Должно быть:
C#
1
2
3
4
5
6
7
public static bool operator !(Money M) {
            bool cash = false;
            if (M.values_second > 0) {
                cash = true;
            }
            return cash;
        }
0
olli_
0 / 0 / 0
Регистрация: 06.02.2017
Сообщений: 7
06.02.2017, 18:45  [ТС] #5
Попробовал так сделать, подчеркивает (Money) внутри скобок
0
TuM0xA
197 / 197 / 85
Регистрация: 21.12.2015
Сообщений: 536
06.02.2017, 18:46 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
olli_, у вас ошибки из-за того что class Money вложенный
исправленная версия
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
133
134
135
136
137
138
139
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
 
namespace prakt_10
{
    class Money
    {
        private int first;
        private int second;
 
        public Money(int first, int second)
        {
            this.first = first;
            this.second = second;
        }
 
        // methods
        public void Show()
        {
            Console.WriteLine("first: {0}, second: {1}", this.first, this.second);
        }
 
        public void Enough_Deficiency(int price)        // enough or not enough
        {
            if (this.first * this.second >= price)
            {
                Console.WriteLine("Enough funds.");
 
                double numObj = this.first * this.second / price;
                numObj = Convert.ToInt16(Math.Floor(numObj));       // rounded <-
 
                Console.WriteLine("Funds enough to buy {0} objects", numObj);
            }
 
            else
            {
                Console.WriteLine("Insufficiently!");
            }
        }
 
        // properties
        public int values_first
        {
            get { return this.first; }
            set { this.first = value; }
        }
 
        public int values_second
        {
            get { return this.second; }
            set { this.second = value; }
        }
 
        public int Cash
        {
            get { return this.first * this.second; }
        }
 
        public int this[int i]
        {
            get
            {
                if (i == 0)
                { return this.first; }
 
                else
                {
                    if (i == 1)
                    { return this.second; }
 
                    else
                    {
                        Console.WriteLine("Error! Invalid index.");
                        return -1;
                    }
                }
            }
 
        }
 
        public static Money operator ++(Money M)
        {
            Money M1 = new Money(M.values_first *= 10, M.values_second *= 10);
            return M1;
        }
 
        public static Money operator --(Money M)
        {
            Money M1 = new Money(M.values_first /= 10, M.values_second /= 10);
            return M1;
        }
 
        public static bool operator !(Money M)
        {
            bool cash = false;
            if (M.values_second > 0)
            {
                cash = true;
            }
 
            return cash;
        }
 
        public static Money operator +(Money M, int skal)
        {
            Money M1 = new Money(M.values_first, M.values_second * skal);
            return M1;
        }
 
 
 
        class test
        {
            static void Main(string[] args)
            {
                int first = int.Parse(Console.ReadLine());
                int second = int.Parse(Console.ReadLine());
                int price = int.Parse(Console.ReadLine());
 
                Money M1 = new Money(first, second);
 
                // tests
                M1.Show();
                M1.Enough_Deficiency(price);
                Console.WriteLine(M1.Cash);
 
                M1.values_first = 100;
                M1.values_second = 100;
                M1.Show();
 
                Console.ReadKey();
            }
        }
    }
}
1
Tyoma
51 / 51 / 8
Регистрация: 12.05.2010
Сообщений: 167
Завершенные тесты: 3
06.02.2017, 18:49 #7
olli_,
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
class Program {
        class Money {
            private int first;
            private int second;
 
            public Money(int first, int second) {
                this.first = first;
                this.second = second;
            }
 
            // methods
            public void Show() {
                Console.WriteLine("first: {0}, second: {1}", this.first, this.second);
            }
 
            public void Enough_Deficiency(int price) // enough or not enough
            {
                if (this.first * this.second >= price) {
                    Console.WriteLine("Enough funds.");
 
                    double numObj = this.first * this.second / price;
                    numObj = Convert.ToInt16(Math.Floor(numObj)); // rounded <-
 
                    Console.WriteLine("Funds enough to buy {0} objects", numObj);
                } else {
                    Console.WriteLine("Insufficiently!");
                }
            }
 
            // properties
            public int values_first { get { return this.first; } set { this.first = value; } }
 
            public int values_second { get { return this.second; } set { this.second = value; } }
 
            public int Cash { get { return this.first * this.second; } }
 
            public int this[int i] {
                get {
                    if (i == 0) {
                        return this.first;
                    } else {
                        if (i == 1) {
                            return this.second;
                        } else {
                            Console.WriteLine("Error! Invalid index.");
                            return -1;
                        }
                    }
                }
 
            }
 
            public static Money operator ++(Money M) {
                Money M1 = new Money(M.values_first *= 10, M.values_second *= 10);
                return M1;
            }
 
            public static Money operator --(Money M) {
                Money M1 = new Money(M.values_first /= 10, M.values_second /= 10);
                return M1;
            }
 
            public static bool operator !(Money M) {
                bool cash = false;
                if (M.values_second > 0) {
                    cash = true;
                }
                return cash;
            }
 
            public static Money operator +(Money M, int skal) {
                Money M1 = new Money(M.values_first, M.values_second * skal);
                return M1;
            }
        }
 
        static void Main(string[] args) {
            int first = int.Parse(Console.ReadLine());
            int second = int.Parse(Console.ReadLine());
            int price = int.Parse(Console.ReadLine());
 
            Money M1 = new Money(first, second);
 
            // tests
            M1.Show();
            M1.Enough_Deficiency(price);
            Console.WriteLine(M1.Cash);
 
            M1.values_first = 100;
            M1.values_second = 100;
            M1.Show();
 
            Console.ReadKey();
 
        }
    }
1
olli_
0 / 0 / 0
Регистрация: 06.02.2017
Сообщений: 7
06.02.2017, 18:51  [ТС] #8
Спасибо, все верно, работает! =)
0
TuM0xA
197 / 197 / 85
Регистрация: 21.12.2015
Сообщений: 536
06.02.2017, 18:53 #9
olli_, перегрузка операторов должна находиться внутри класса для которого она реализуется
1
06.02.2017, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2017, 18:53
Привет! Вот еще темы с ответами:

Реализовать перегрузку операторов в приведенном коде - C#
Доброго времени суток! Передо мной стала задача реализовать перегрузку операторов, а я в С# полный ноль, все операторы я привел в конце...

Разработать класс CAuto (Автомобиль), содержащий поля: BodyID (номер кузова), EngineID - C#
задание в общем такое: 1. Разработать главную форму программного обеспечения с кнопкой, предназначенной для открытия второй формы. ...

Разработать собственный класс, содержащий методы для нахождения количества отрицательных элементов массива - C#
Доброе утро !! Помогите пожалуйста Разработать собственный класс, содержащий методы для нахождения количества отрицательных элементов...

Разработать собственный класс, содержащий метод для вычисления стоимости покупки с учетом скидки - C#
Разработать собственный класс, содержащий метод для вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется, если сумма...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru