Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Int i,j;




for (i=0;i<n;i++)

for (j=i;j<n;j++)

{

X[i][j]=(Y[i][j] + Y[j][i])/2;

X[j][i] =X[i][j];

}

}

void VIVOD(float Y[4][4], int n)//функция вывода матрицы

{for (i=0;i<n;i++)

{for (j=0;j<n;j++) printf("%8.2f",Y[i][j]);

printf("\n");

}

}

void main()

{

float A[4][4], B[4][4], C[4][4], D[4][4];

int i, j;

printf("Введите матрицу А\n");

for (i=0;i<3;i++)

for (j=0;j<3;j++) scanf("%f",&A[i][j]);

printf("Введите матрицу B\n");

for (i=0;i<4;i++)

for (j=0;j<4;j++) scanf("%f",&B[i][j]);

SM(A, 3,C);// обращение к функции SM для матрицы A

SM(B, 4, D); //обращение к функции SM для матрицы B

printf("Симметричная матрица С\n");

VIVOD(C,3);

printf("Симметричная матрица D\n");

VIVOD(D,4);

}


 

Перегрузка функций в С++

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

float SUM (float a, float b);

//принимает два вещественных аргумента и возвращает результат ввиде вещественного числа

 

double SUM (double a, double b);

//принимает два аргумента вещественного длинного типа и возвращает результат ввиде вещественного длинного числа

 

complex SUM (complex a, complex b);

//принимает два аргумента комплексного типа и возвращает результат ввиде комплексного числа

 

Компилятор определит, какую именно функцию с именем SUM надо вызвать по типу передаваемых ей параметров.

Наполним функцию SUM банальным алгоритмом вычисления суммы двух чисел.

#include "stdafx.h"

 

#define complex struct compl

complex

{double x,y;};

 

complex SUM (complex a, complex b)

{complex c;

c.x=a.x+b.x;

c.y=a.y+b.y;

return c;

}

float SUM (float a, float b)

{float c;

c=a+b;

return c;

}

double SUM (double a, double b)

{ double c;

c=a+b;

return c;

}

 

 

int _tmain(int argc, _TCHAR* argv[])

{complex z,m,n;

float a=4.5,b=6.5;

z.x=5; z.y=6;

m.x=7;m.y=8;

n= SUM (z,m); //вызов функции SUM для комплексных параметров

printf("%lf+i%lf\n",n.x,n.y);

float d= SUM (a,b); //вызов функции SUM для вещественных параметров

printf("d=%f\n",d);

float d2= SUM (10,35); //неоднозначный вызов функции SUM

printf("d2=%f\n",d2);

return 0;

}

 

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

По типам фактических параметров компилятор определяет, какую именно функцию требуется вызвать. Этот процесс называется разрешением перегрузки (перевод английского слова resolution в смысле «уточнение»). Тип возвращаемого функцией значения в разрешении не участвует. Механизм разрешения основан на достаточно сложном наборе правил, смысл которых сводится к тому, чтобы использовать функцию с наиболее подходящими аргументами или выдать сообщение, если такой не найдется. Если точного соответствия не найдено, выполняется преобразование типов параметров по общим правилам, например char в int; int во float, float в double; и т.п. Если соответствие может быть получено более чем одним способом, вызов считается неоднозначным и выдается сообщение об ошибке. В нашем примере это продемонстрировано вызовом третьим, когда в функцию SUM передаются в качестве параметров два целых числа 10 и 35. Эти параметры могут быть преобразованы как в тип float, так и в тип double, что и вызовет возникновение ошибочной неоднозначности.

При создании перегруженных функций необходимо придерживаться следующих правила:

• Перегруженные функции должны находиться в одной области видимости,

иначе произойдет сокрытие аналогично тому, как это происходит с одинаковыми именами переменных во вложенных блоках.

• Перегруженные функции могут иметь параметры по умолчанию, при этом

значения одного и того же параметра в разных функциях должны совпадать.

В различных вариантах перегруженных функций может быть различное количество параметров по умолчанию.

• Функции не могут быть перегружены, если описание их параметров отличается только модификатором const (например, int и const int ), или использованием ссылки (например, int и int&).

Более подробную информацию о перегруженных функциях см. в [2].

 


Поделиться:

Дата добавления: 2014-11-13; просмотров: 87; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты