Перегрузка функций.

Объявление класса

 

Класс используется для создания объектов. Основная форма имеет вид:

 

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 (подробнее на лабораторных работах), т.к. при вызове метода записи вызовется соответствующий перегруженный метод для случая, когда аргумент является целым числом.