Создать класс Rectangle, содержащий следующие члены класса - C#
Формулировка задачи:
VS 2010. Компилятор выдает ошибки, Предложение using должно предшествовать любым другим элементам пространства имен кроме объявлений внешних псевдонимов. Переношу Using ввер к остальным, ошибок становится больше. Как это исправить?
Создать класс Rectangle, содержащий следующие члены класса:
Классы и объекты
1. Поля:
• int a, b;
2. Конструктор, позволяющий создать экземпляр класса с заданными длинами сторон.
3. Методы, позволяющие:
• вывести длины сторон прямоугольника на экран;
• расчитать периметр прямоугольника;
• расчитать площадь прямоугольника.
4. Свойства, позволяющие:
• получить и установить длины сторон прямоугольника (доступные для чтения и
записи);
• установить, является ли данный прямоугольник квадратом (доступное только для
чтения).
5. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b;
при других значениях индекса должно выдаваться сообщение об ошибке.
6. Перегруженные операции и константы, позволяющие:
• одновременно увеличить (уменьшить) значение полей a и b на 1 (операции ++ и --);
• узнать, является ли прямоугольник квадратом (константы true и false);
• одновременно умножить поля a и b на скаляр (операция *).
Продемонстрировать работу класса.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Study
{
class Rectangle
{
int a, b;
int [] array = new int [2];
public Rectangle(int a, int b)
{
this.a = a;
this.b = b;
}
public void Show ()
{
Console.WriteLine("Storony " + a +" x " + b);
}
public int Perimetr ()
{
return a * 2 + b * 2;
}
public int Square()
{
return a * b;
}
public int A
{
get { return a; }
set { a = value; }
}
public int B
{
get { return b; }
set { b = value; }
}
public bool K //kvadrat?
{
get { if (a == b) return true; else return false; }
}
public int this[int i]
{
get
{
if (i == 0)
return a;
else
return 0;
if (i == 1)
return 1;
else
return 0;
}
set
{
if (i == 0)
array[i] = a;
if (i == 1)
array[i] = b;
}
}
public static Rectangle operator ++(Rectangle ob)
{
Rectangle ob1 = new Rectangle(ob.a, ob.b);
ob1.a = ob.a + 1;
ob1.b = ob.b + 1;
return ob1;
}
public static Rectangle operator --(Rectangle ob)
{
Rectangle ob1 = new Rectangle(ob.a, ob.b);
ob1.a = ob.a - 1;
ob1.b = ob.b - 1;
return ob1;
}
public static bool operator true(Rectangle ob)
{
if (ob.a == ob.b)
return true;
else return false;
}
public static bool operator false(Rectangle ob)
{
if (ob.a != ob.b)
return true;
else
return false;
}
public static Rectangle operator *(Rectangle ob, int skal)
{
Rectangle ob1 = new Rectangle(ob.a, ob.b);
ob1.a = ob.a * skal;
ob1.b = ob.b * skal;
return ob1;
}
public static implicit operator Rectangle (string a) //неявное преобразование типа int [] в DemoArray
{
return new Rectangle(a);
}
public static implicit operator int [](Rectangle a) //неявное преобразование типа DemoArray в int []
{
int []temp=new int[a.LengthArray];
for (int i = 0; i < a.LengthArray; ++i)
temp[i] = a[i];
return temp;
}
}
}
using System;
using Study;
class MyClass
{
static void Main()
{
Rectangle ob = new Rectangle(3,5);
ob.Show();
Console.WriteLine("Perimentr = " + ob.Perimetr());
Console.WriteLine("Ploshad = " + ob.Square());
ob.A++;
ob.B++;
ob.Show();
ob.A--;
ob.B--;
ob.Show();
ob = ob * 2;
ob.Show();
ob.A = 15;
ob.B = 15;
ob.Show();
if (ob)
{
Console.WriteLine("Eto kvadrat!");
}
Console.ReadKey();
}
}Решение задачи: «Создать класс Rectangle, содержащий следующие члены класса»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
namespace Study
{
class Rectangle
{
int a, b;
public Rectangle(int a, int b)
{
this.a = a;
this.b = b;
}
public void Show() { Console.WriteLine("Стороны {0} x {1}", a, b); }
public int Perimetr() { return a + a + b + b; }
public int Square() { return a * b; }
public int A
{
get { return a; }
set { a = value; }
}
public int B
{
get { return b; }
set { b = value; }
}
public bool K { get { return a == b; } }
public int this[int i]
{
get
{
switch (i)
{
case 0: return a;
case 1: return b;
default: throw new Exception("Некорректный индекс");
}
}
set
{
switch (i)
{
case 0: a = value; break;
case 1: b = value; break;
default: throw new Exception("Некорректный индекс");
}
}
}
public static Rectangle operator ++(Rectangle ob)
{
return new Rectangle(ob.a + 1, ob.b + 1);
}
public static Rectangle operator --(Rectangle ob)
{
return new Rectangle(ob.a - 1, ob.b - 1);
}
public static bool operator true(Rectangle ob) { return ob.K; }
public static bool operator false(Rectangle ob) { return !ob.K; }
public static Rectangle operator *(Rectangle ob, int skal) { return new Rectangle(ob.a * skal, ob.b * skal); }
}
class Program
{
static void Main(string[] args)
{
Rectangle ob = new Rectangle(3, 5);
ob.Show();
Console.WriteLine("Периметр = " + ob.Perimetr());
Console.WriteLine("Площадь = " + ob.Square());
++ob; ob.Show();
--ob; ob.Show();
ob *= 2; ob.Show();
ob.A = 15;
ob.B = 15;
ob.Show();
if (ob) Console.WriteLine("Это квадрат! ");
else Console.WriteLine("Это не квадрат! ");
ob[0] = 20;
ob[1] = 10;
ob.Show();
try { ob[2] = 20; } catch (Exception e) { Console.WriteLine(e.Message); }
Console.ReadKey();
}
}
}
}