Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2019, 21:44   #1
Elocika
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию Перегрузка оператора, C#

Добрый вечер, помогите пожалуйста.
Нужно создать класс для перегрузки оператора "-" , разность множеств
Все, что удалось написать

Код:
namespace Sets
{
	class Sets
	{
		private int[] Alfa;
		private int[] Beta;
		
		public Sets(int[] alfa, int[] beta)
		{
			Alfa = alfa;
			Beta = beta;
		}

		public static Sets operator -(Sets a, Sets b)
		{
			return a.Alfa.Except(b.Beta);
		}

	}

			//Console.Write("Разность: ");
			//var result = A.Except(B);

			//foreach (int s in result)
			//	Console.Write(s);

			//Console.ReadKey();
	
}

class Program
{
	static void Main(string[] args)
	{

	}
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 04.06.2019 в 21:50.
Elocika вне форума Ответить с цитированием
Старый 04.06.2019, 23:02   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
public static Sets operator -(Sets a, Sets b)
		{
			return a.Alfa.Except(b.Beta);
		}
Вы определитесь что вы возвращаете то? массив или класс.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 04.06.2019, 23:52   #3
Elocika
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

поменяла, нужно массив возвращать, но все равно ошибка
ошибка.png
Elocika вне форума Ответить с цитированием
Старый 04.06.2019, 23:57   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
result.ToArray()
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.06.2019, 00:01   #5
Elocika
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

спасибо ))
Elocika вне форума Ответить с цитированием
Старый 05.06.2019, 18:03   #6
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

На самом деле непонятно зачем в классе два поля Alfa и Beta. Скорее всего это ошибка?

Набросал для примера свой вариант класса.
(реализовал в нём операцию + и -. Явное приведение из int[] в класс Set. Неявное приведение их Set в int[]. Переопределил метод ToString для того чтобы можно было класс Set выводить на печать непосредственно. А также добавил статистический метод Parse чтобы получать Set непосредственно из строкового представления)

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sets
{
    public class Set
    {
        private HashSet<int> data;
        public Set()
        {
            data = new HashSet<int>();
        }
        public Set(IEnumerable<int> init)
        {
            data = new HashSet<int>(init);
        }
        public static Set operator -(Set a, Set b)
        {
            return new Set(a.data.Where(x => !b.data.Contains(x)));
        }
        public static Set operator +(Set a, Set b)
        {
            return new Set(a.data.Concat(b.data));
        }
        public static explicit operator Set(int[] a)
        {
            return new Set(a);
        }
        public static implicit operator int[](Set a)
        {
            return a.data.ToArray();
        }
        public override string ToString()
        {
            StringBuilder result = new StringBuilder();
            result.Append("[");
            bool isFirst = true;
            foreach (var tmp in data)
            {
                if (isFirst)
                    isFirst = false;
                else
                    result.Append(", ");
                result.Append(tmp);
            }
            result.Append("]");
            return result.ToString();
        }
        public static Set Parse(string s)
        {
            return new Set(s.TrimStart('[', ' ', ',').TrimEnd(']', ' ', ',').Split(',').Where(x=>!string.IsNullOrWhiteSpace(x)).Select(x => int.Parse(x)));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Set Set1 = Set.Parse("[1,2,3,4,5,6]");
            Set Set2 = Set.Parse("[4,5,7]");
            Set Set3 = (Set)(new int[] { 1, 2, 3 }); //explicit operator Set(int[] a)
            Console.WriteLine(Set1 - Set2); //Set operator -(Set a, Set b)
            Console.WriteLine(Set1 + Set2); //Set operator +(Set a, Set b)
            Console.WriteLine(Set1 - Set3); //Set operator -(Set a, Set b)
            int[] SetAsArray = Set3; //implicit operator int[](Set a)
            foreach (var tmp in SetAsArray)
                Console.Write(tmp.ToString()+" ");
            Console.WriteLine();
            Console.ReadLine();
        }
    }
}
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 06.06.2019, 00:04   #7
Elocika
 
Регистрация: 04.06.2019
Сообщений: 5
По умолчанию

Спасибо большое))
Elocika вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка оператора [] dbazulev Общие вопросы C/C++ 1 02.12.2012 20:19
Перегрузка оператора >> Sektr63 Общие вопросы C/C++ 5 19.11.2012 01:51
Перегрузка оператора RuVarez Общие вопросы C/C++ 15 12.07.2012 10:00
перегрузка оператора ++ nhr Общие вопросы C/C++ 1 04.05.2011 23:32
перегрузка оператора = mcpro Общие вопросы C/C++ 8 04.02.2011 15:28