Перегрузка оператора сложения

GROM32RUS

помогите пожалуйста создать перегрузку для + так чтоб секунды увеличивались на 1 класс програм
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication13
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите время");
            Console.WriteLine("Часы:");
            int Hours = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Минуты:");
            int Minutes = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Секунды:");
            int Seconds = Convert.ToInt32(Console.ReadLine());
            var tim = new Time(Hours, Minutes, Seconds);
            
 
 
 
            Console.ReadKey();
        }
    }
}
класс тайм
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication13
{
    class Time
    {
        public Time(int Hours, int Minutes, int Seconds)
        {
            if (Hours > 23 || Hours < 0)
            {
                Console.WriteLine("Неверный формат времени(часов)");
            }
            if (Minutes > 59 || Minutes < 0)
            {
                Console.WriteLine("Неверный формат времени(минут)");
            }
            if (Seconds > 59 || Minutes < 0)
            {
                Console.WriteLine("Неверный формат времени(секунд)");
            }
            else
                Console.WriteLine("{0}:{1}:{2}", Hours, Minutes, Seconds);
        }
        public static Time operator +()
        {
            
        }
    }
}
8 ответов

GROM32RUS

Попробуйте вот так.
    class Time
    {
        int Hours;
        int Minutes;
        int Seconds;
 
        public Time(int h,int m,int s)
        {
            Hours=h;
            Minutes=m;
            Seconds=s;
        }
         public static Time operator +(Time obj, int *****)
        {
            return new Time(obj.Hours, obj.Minutes, obj.Seconds + *****);
        }
    }


GROM32RUS

insite2012, не работает,да и что такое obj


GROM32RUS

Все там работает, класс свой приведите к нормальному виду... вы сами понимаете, что у вас в классе ни полей, ни свойств, ничего нет... Ну создали вы объект класса, присвоили ему что-то через конструктор, а толку с этого... Честно говоря, это не класс, а не пойми что, на мой взгляд... А оператор + бинарный, поэтому мы передаем ему один экземпляр класса как параметр и второй параметр - приращение.


GROM32RUS

что такое obj
В параметре obj будет содержаться левое слагаемое
Time t = new Time(12, 30, 10);
Time t2 = t + 15;  // t - в параметре obj
Также рекомендую написать "правую" версию оператора
public static Time operator +(int *****, Time obj) {
    // ...
}


GROM32RUS

Ну создали вы объект класса, присвоили ему что-то через конструктор, а толку с этого... Честно говоря, это не класс, а не пойми что, на мой взгляд...
я пишу программу по учебному заданию,то есть все что в ней уже вписано требуется заданием.


GROM32RUS

Так вот Вы задание лучше опишите, тогда яснее будет. Мне как-то сомнительно, что именно такое задание - класс, ничего не содержащий. И как тогда для него оператор + перегружать, если в нем нет ничего...


GROM32RUS

Так вот Вы задание лучше опишите, тогда яснее будет.
держи Создать класс Time со следующими членами данных: Hours int Minutes int Seconds int Написать конструктор с параметрами, позволяющий установить значение времени (задать значения для всех трех полей). Предусмотреть проверку на допустимость значений параметров (значения Seconds и Minutes не должны превышать 60, а значение Hours не должно превышать 24). Написать перегрузку оператора + таким образом, чтобы он увеличивал значение, содержащееся в поле Seconds, на 1. Когда значение Seconds превышает 60, оно должно быть сброшено в 0, а значение поля Minutes должно увеличиться на 1. Аналогично, когда значение минут превышает 60, следует обнулить поля Seconds и Minutes, и увеличить значение поля Hours на 1. Когда значение Hours превышает 24, все поля должны быть сброшены в 0. Написать в классе метод, который добавляет к текущему времени заданное произвольное количество секунд. Если добавляется большое количество секунд, вносятся соответствующие изменения в значения минут и часов. Написать тестовый класс с функцией Main, тестирующей все созданные конструкторы, методы и операторы класса Time.


GROM32RUS

Как-то так. Проверяйте.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace GROM32RUS
{
    class Program
    {
        static void Main(string[] args)
        {
            MyTime t1 = new MyTime(02, 02, 35);
            Console.WriteLine(t1);
            t1.EnSeconds(40);
            //t1++;
            Console.WriteLine(t1);
            Console.Read();
        }
    }
    class MyTime
    {
        public MyTime(int H, int M, int S)
        {
            Hours = H;
            Minutes = M;
            Seconds = S;
        }
        public int Seconds
        {
            get;
            private set;
        }
        public int Minutes
        {
            get;
            private set;
        }
        public int Hours
        {
            get;
            private set;
        }
        public static MyTime operator++(MyTime obj)
        {
            return new MyTime(obj.Hours, obj.Minutes, obj.Seconds + 1);
        }
        public void EnSeconds(int s)
        {
            Seconds += s;
            if (Seconds >= 60)
            {
                Seconds = Math.Abs(Seconds-60);
                Minutes++;
                if (Minutes >= 60)
                {
                    Hours++;
                    Minutes = 0;                   
                    Seconds = Math.Abs(Seconds - 60);
 
                    if (Hours >= 24)
                    {
                        Hours = 0;
                        Minutes = 0;
                        Seconds = Math.Abs(Seconds - 60);
                    }
                }
 
            }
        }
        public override string ToString()
        {
            return string.Format("{0:d2}:{1:d2}:{2:d2}", Hours, Minutes, Seconds);
        }
    }
}