Перегрузка функций.
Объявление класса
Класс используется для создания объектов. Основная форма имеет вид:
class имя класса
{
закрытые функции и переменные
public:
открытые функции, функции-члены и переменные
}
список объектов;//не является обязательным
Закрытые функции и переменные - члены(members) доступны только для других членов этого класса.
Открытые функции и переменные доступны для любой части программы, в которой находится класс.
Функции, объявленные внутри описания класса называются функциями членами (member functions).
Для определения функций-членов используется форма:
тип имя класса:: имя функции-члена (параметры)
{
тело функции
}
Два двоеточия после имени класса называются операцией расширения области видимости (scope resolution operator).
Существуют несколько привилегий доступа к данным и функциям класса:
· private
· protected
· public
Закрытые private имена имеют наиболее ограниченный доступ, разрешенный только функциям данного класса. Доступ производных классов к закрытым методам базовых классов запрещен.
Защищенные protected имена имеют доступ, разрешенный методам данного класса и производных от него классов.
Общедоступные public имена имеют неограниченный доступ, разрешенный методам всех классов и их объектов.
По умолчанию все имена относятся к private и, следовательно, не могут использоваться функциями не входящими в состав класса.
Объявление класса только определяет тип объектов, а сами объекты не задает, т. е. память не выделяется. Для создания объектов имя класса используется как спецификатор типа данных.
После создания объекта к открытым членам класса можно обращаться, используя операцию точка.
#include <iostream.h>
class class1 {//объявлен сласс class1
int a; //доступна для функций членов class1
public:
int kwadrat(int b);//функция член класса class1
};
int class1::kwadrat(int b) //определение функции kwadrat()
{
a=b*b;
return a;
}
main()
{
class1 c; //создается объект с типа class1
cout<<" "<<c.kwadrat(3)<<" ";//вычисление и вывод квадрата трех
return 0;
}
Две или более функции, имеющие одно и тоже имя, называются перегружеными. Обычно функции отличаются количеством и типом аргументов. Транслятор автоматически на основании количества или типов аргументов выберет правильный вариант.
#include <iostream.h>
void k(int a);//прототип первой функции
void k(int a, float b); //прототип второй функции
void k(int a) //описание первой функции
{
cout << a <<" ";
}
void k(int a, float b) //описание второй функции
{
cout <<a<<" "<< b <<" ";
}
main()
{
k(4);//вызов первой функции
k(5, 10.2);//вызов второй функции
return 0;
}
Большинство свойств компонент в Borland C++ Builder имеют перегруженные методы чтения и записи, что позволяет предотвратить множество ошибок программиста, связанных с несоответствием типов данных.
Например оператор
Label1->Caption=4;
Не приведет к ошибке, несмотря на то, что свойство Caption является строковым типом AnsiString (подробнее на лабораторных работах), т.к. при вызове метода записи вызовется соответствующий перегруженный метод для случая, когда аргумент является целым числом.