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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2009, 15:29   #1
Ksy
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 64
Стрелка Объясните , зачем использовать модификаторы ref и out.

У меня есть программа, которая реализует клас исполнения целочисленых арифметических вычислений с произвольным числом значущих цыфр. Мне нужно узнать зачем используются модификаторы ref и out.


Код:
namespace ConsoleApplication1
{
class Algebra {
private readonly int [] mass;
public Algebra() {
mass= new int[100];
}
public Algebra(int x)
{
mass = new int[x];
}

public void Fill ()
{
Random rand = new Random();
for (int i = 0; i < mass.Length; i++)
mass[i] = rand.Next(9);

}

private static void Max(ref Algebra a, ref Algebra b, out int x,out int y) { //зачем используются 
Algebra c; // здесь ref и out
if (a.mass.Length > b.mass.Length)
{
x = a.mass.Length-1;
y = b.mass.Length-1;
}
else
{
x = b.mass.Length-1;
y = a.mass.Length-1;
c = a;
a = b;
b = c;
}
}


public static Algebra operator + (Algebra a, Algebra b) {
Algebra result= new Algebra();
int x, y,i=99;
Max(ref a,ref b,out x,out y);
for (; i > 0&&y!=-1; i--,y--,x--) {
result.mass[i] += a.mass[x] + b.mass[y];
if (result.mass[i] >= 10)
{
result.mass[i] = result.mass[i] % 10;
result.mass[i-1]++;
}
}
for (; x!=-1; i--,x--)
{
result.mass[i] += a.mass[x];
}
return result;
}

public static Algebra operator -(Algebra a, Algebra b)
{
Algebra result = new Algebra();
int x, y, i = 99;
Max(ref a, ref b, out x, out y);
for (; i > 0 && y != -1; i--, y--, x--)
{
result.mass[i] += a.mass[x] - b.mass[y];
if (result.mass[i] < 0)
{
result.mass[i] += 10;
result.mass[i - 1]--;
}
}
for (; x != -1; i--, x--)
{
result.mass[i] += a.mass[x];
}
return result;
}

public void Print (){
int i;
for (i = 0; i < mass.Length; i++)
{
if (mass[i] != 0)
break;
}
for (; i < mass.Length; i++)
{
Console.Write(mass[i]);
}
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
Algebra a = new Algebra(4);
a.Fill();
Algebra b = new Algebra(3);
b.Fill();
Console.Write("Масив а: ");
a.Print();
Console.Write("Масив б: ");
b.Print();
Algebra sum = a + b;
Console.Write("Сумма: ");
sum.Print();
Algebra raz = a - b;
Console.Write("Разница: ");
raz.Print();
Console.ReadKey(true);
}
}
}
Ksy вне форума Ответить с цитированием
Старый 27.12.2009, 16:13   #2
Ksy
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 64
По умолчанию

Мне уже объяснили:

ref используется ради вот этих строк:
c = a;
a = b;
b = c;

Чтобы можно было присваивать ссылки на другие обьекты.
out используется, чтобы функции возвращали более одного значения
Ksy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошыбка в параметре з ref, наверное... Natok Помощь студентам 2 31.05.2009 17:57
Зачем живем? Simply-Art Свободное общение 6 16.10.2008 15:44
Кто сможет разъяснить как и зачем использовать виртуальные функции в C++? Dunhil Помощь студентам 5 20.12.2007 14:19