Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Объект.метод(параметры)




Объект.поле

Class Count

Class Person

{ public: string Fio; double summa; };

Person Kunaev = { "Kупаев H.”, 10000.00 };

Указатели могут быть инициализированы так же, как и указатели на переменные встроенных типов:

Money *pt = new Money, *pp = pt, *ps;//объявление указателей

ps = new Money; //и создание объектов

Date *pd = new Date(), *pr; //объявление указателей

pr = new Date(); //и создание объектов

Форма со скобками после типа выполняет обнуление полей динамического объекта. Объекты класса разрешается определять в качестве полей другого класса:

{

Money Summa; // сумма счета

unsigned long NumberCount; // номер счета

Date D; // дата открытия счета

public:

void Display(); // вывод на экран

};

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

Объекты класса можно передавать в качестве аргументов любыми способами (по значению, по ссылке, по указателю) и получать как результат из функции:

Money AddMoney(const Money &a, const Money &b); //по константной ссылке

Money Init(const long double &r); //возврат значения

void f1(Date t); //по значению

void f2(Date &t); //по ссылке

void f3(Date *t); //по указателю

Функция, возвращающая объект класса, может быть использована для инициализации переменкой класса:

Money t = Init(200.56);

Money r = AddMoney(x, y);

Можно объявлять объекты-константы класса с обязательной инициализацией:

const Money k = p;

const Date d(t);

сonst Money t = Init(200.50);

Доступ к открытым полям выполняется обычными для структуры способами:

указатель->поле

Вызов открытых методов осуществляется аналогично

указатель->метод(параметры)

Для массива объектов обращение к открытому полю выполняется так:

имя_массива[индекс].поле

Аналогично выполняется и вызов метода для элемента массива

имя_массива[индекс].метод(аргументы)

Примеры:

Date d;

d.day = 21; d.month = 11; d.year = 2013;

d.print();

d.set(22, 2, 2013);

Date DD[3]; DD[0].day = 12;

DD[0].next();

Library t;

int a = t.function(5);

Library *pt = new Library;

int b = pt->function(5);

Count A[5]; //объявление массива

for(int i = 0; i < 5; i++)

A[i].Display();

Определение размера выделяемой объектам памяти (в байтах) выполняется операцией sizeof(имя_класса). Методы не занимают место в классе. Даже пустой класс занимает некоторое количество памяти.

Определение методов класса

Методы класса имеют неограниченный доступ ко всем элементам класса независимо ни от порядка объявления элементов класса, ни от спецификаторов доступа. Методы могут определяться как внутри класса, так и вне его. Определение метода внутри класса не отличается от определения обычной функции. Метод, определенный внутри класса, считается по умолчанию встроенной функцией (inline).

Если метод определяется вне класса, то принадлежность метода классу указывается префиксом-именем класса. В классе присутствует только прототип. Метод, определенный вне класса, по умолчанию не считается inline-функцией. Методы могут быть перегружены и могут принимать аргументы по умолчанию. Аргументом и/или возвращаемым значением метода может быть объект того же класса, и такие объекты разрешено объявлять внутри метода.

Фактически левым аргументом метода является объект, для которого этот метод вызывается, например

time t;

t.settime(12.54);

Метод неявно получает в качестве аргумента указатель на объект, для которого он вызван. Этот указатель обозначается зарезервированным словом this и может использоваться в теле метода. Через него же разумно осуществлять доступ к полям и методам класса в случае неоднозначности (совпадение имен).

this->Summa;

Запись this представляет собой значение текущего объекта. Часто это значение используется для возврата значения определяемого класса.

Методы могут быть перегружены. Перегрузка методов — это одно из проявлений принципа полиморфизма.

Методы могут быть константными. Константный метод не изменяет значения полей класса. Константный метод объявляется при указании слова const после списка аргументов метода. Константные и неконстантные методы не являются эквивалентным и, даже если у них полностью совпадают прототипы (кроме слова const после списка аргументов). Для объекта-константы может быть вызван только константный метод. Для объекта-переменной можно вызывать как константные, так и неконстантные методы.

Для ввода значений нового типа обычно реализуется метод Read(). В простейшем виде выполняется заполнение полей нового класса из стандартного потока ввода cin с клавиатуры. В методе перед вводом каждого значения можно вывести подсказку-приглашение, объясняющую очередность набора. Передаваемые значения обычно проверяются на допустимость.

Для вывода значений нового типа реализуется метод Display(). В самом простом случае он представляет собой вывод из полей нового класса на экран — в стандартный поток cout. Метод вывода обычно реализуется как константный (см. листинг 1.2).




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 316; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.