Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 4 5 6 7 8 9 < 10 > 11 12 13 14 15 16 .. 206 >> Следующая

Ниже приводится простое объявление класса:
class myclass {
// закрытый элемент класса int а ; public:
void set_a(int num) int get_a ( ) ;
);
Этот класс имеет одну закрытую переменную а, и две открытые функции, set_a() и get_a(). Обратите внимание, что прототипы функций объявляются
Глева h Краткий обзор C++ ________ 27
внутри класса. Функции, которые объявляются внутри класса, называются функциями-членами (memberfunctions).
Поскольку а является закрытой переменной класса, она недоступна для любой функции вне myclass. Однако поскольку set_a() и get_______а() являются чле-
нами myclass, они имеют доступ к а. Более того, set_a() и get_a(), являясь открытыми членами myclass, могут вызываться из любой части программы, использующей myclass.
Хотя функции set_a() и get_a() и объявлены в myclass, они еще не определены. Для определения функции-члена вы должны связать имя класса, частью которого является функция-член, с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Два двоеточия называются оператором расширения области видимости (scope resolution operator). Например, далее показан способ определения функций-членов set_a() и get_a():
void myclass : : set_a (intnum)
f
a=num;
}
int myclass: :get_a()
{
return a;
}
Отметим, что и set_a() и get_a() имеют доступ к переменной а, которая для myclass является закрытой. Как уже говорилось, поскольку set_a() и get_a() являются членами myclass, они могут напрямую оперировать с его закрытыми данными.
При определении функции-члена пользуйтесь следующей основной формой:
Тил мозвр^значения имя класса;; имя_фун к ц и я (список_ параметров)
{
. . .// тело функции
)
Здесь имя_класса — это имя того класса, которому принадлежит определяемая функция.
Объявление класса myclass не задает ни одного объекта типа myclass, оно определяет только тип объекта, который будет создан при его фактическом объявлении. Чтобы создать объект, используйте имя класса, как спецификатор типа данных. Например, в этой строке объявляются два объекта типа myclass:
myclass obi, оЪ2; // это объекты типа myclass
28
Самоучитель C++
Объявление класса является логической абстракцией, которая задает новый тип объекта. Объявление же объекта создает физическую сущность объекта такого типа. То есть, объект занимает память, а задание типа нет,
После того как объект класса создан, можно обращаться к открытым членам класса, используя оператор точка (.), аналогично тому, как осуществляется доступ к членам структуры. Предположим, что ранее объекты были объявлены, тогда следующие инструкции вызывают set_a() для объектов оЫ и оЬ2:
оЫ > set_a (10) ; // установка версии а объекта оЫ равной 10
сЬ2.seta(99); // установка версии а объекта оЬ2 равной 99
Как видно из комментариев, эти инструкции устанавливают значение переменной а объекта оЫ равной 10 и значение переменной а объекта оЬ2 равной 99. Каждый объект содержит собственную копию всех данных, объявленных в классе. Это значит, что а в obi отлично от а в оЬ2.
Каждый объект класса имеет собственную копию всех переменных, объявленных внутри класса.
1. В качестве первого простого примера, рассмотрим программу, в которой используется myclass, описанный в тексте, для задания значений а для оЫ и оЬ2 и вывода на экран этих значений для каждого объекта:
#include <iostream> using namespace std;
class myclass {
// закрытая часть myclass int a; public:
void setatint num); int get_a ( ) ;
void myclass: :set a(int num)
Глава 1. Краткий обзор C++ _ 29
int myclass: :get_a()
{
return a;
}
int main ( )
{
myclass obi, ob2;
obi.set_a(10}; ob2.set_a(99);
cout << obl.get_a() << "\n"; cout << ob2.get_a() << "\n";
return 0;
}
Как и следовало ожидать, программа выводит на экран величины 10 и 99.
2. В предыдущем примере переменная а в myclass является закрытой. Это означает, что она непосредственно доступна только для членов myclass. (Это один из доводов в пользу существования открытой функции get_a().) Если вы попытаетесь обратиться к закрытому члену класса из той части вашей программы, которая не является членом этого класса, то результатом будет ошибка при компиляции. Например, предположим, что myclass задан так, как показано в предыдущем примере, тогда компиляция функции main() вызовет ошибку:
// Этот фрагмент содержит ошибку #include <iostream>
using namespace std;
int inai n (}
{
myclass obi, ob2 ;
obl.a = 10; // ОШИБКА! к закрытому члену нет
оЬ2.а =99; // доступа для функции — не члена
cout « obl.get_a?) « "\п";
cout « ob2.get_a() << "\nM;
return 0;
l
3. Точно так же? как открытые функции-члены, могут существовать и открытые переменные-члены. Например, если бы а была объявлена в открытой секции myclass, тогда к ней, как показано ниже, можно было бы обратиться из любой части программы:
Предыдущая << 1 .. 4 5 6 7 8 9 < 10 > 11 12 13 14 15 16 .. 206 >> Следующая