Программирование >>  Расширенная версия языка c++ 

1 ... 4 5 6 [ 7 ] 8 9 10 ... 227


внутри класса. Функции, которые объявляются внутри класса, называются функциями-членами (memberfunctions).

Поскольку а является закрытой переменной класса, она недоступна для любой функции вне myclass. Однако поскольку set a() и get a() являются членами myclass, они имеют доступ к а. Более того а() а(), являясь открытыми членами myclass, могут вызываться из любой части программы,

использующей myclass.

Хотя функции set a() и get a() и объявлены в myclass, они еще не определены. Для определения функции-члена вы должны связать имя класса, частью которого является с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Два двоеточия называются оператором расширения области видимости (scope resolution operator). Например, далее показан способ определения функций-членов set a() и get a():

void myclass : : set a (intnum) - . -

a=num;

int myclass: :get a()

return a;

что и set a() и get a() имеют доступ к переменной а, которая для

myclass является закрытой. Как уже говорилось, поскольку set a() и get a() являются членами они могут напрямую оперировать с закрытыми

данными.

При определении пользуйтесь следующей основной формой:

TxnjsosBpJнaчeиля има: : ния функция (списо параметров,)

. . . тело функции

>

Здесь К4асса - это имя того класса, которому принадлежит определяемая

функция.

Объявление класса myclass не задает ни одного объекта типа myclass, оно определяет только тип объекта, который будет создан при его фактическом

объявлении. Чтобы создать объект, используйте имя класса, как спецификатор типа данных. Например, в этой строке объявляются два объекта типа

myclass:

myclass 0Ь2; это объекте! типа myclass




Каждый объект класса имеет собственную копию всех переменных, объявленных внутри класса.

[.Примеры ,

1. В качестве первого простого примера, рассмотрим программу, в которой используется myclass, описанный в тексте, для задания значений а для оЫ и оЬ2 и вывода на экран этих значений для каждого объекта:

#include <iostream> usin espace std;

class myclass {

закрытая часть myclass

int a ; public:

void set a(int num);

intget a() ; . v . .S

J. . ,

void myclass::set a{int num)

a=num;

Объявление класса является логической абстракцией, которая задает новый тип объема. Объявление же объема создает физическую сущность объема такого типа. То есть, объект занимает память, а задание типа нет,

После того как объект класса создан, можно обращаться к открытым членам класса, используя оператор точка (.), аналогично тому, как осуществляется доступ к членам структуры. Предположим, что ранее объекты были объявлены, тогда следующие инструкции вызывают set a() для объектов оЫ и оЬ2:

obl.set a(10) ; установка версии а объекта жадной 10 оЬ2.set a(99); установка версии а объекта оЬ2 равной ЭЭ

Как видно из комментариев, эти инструкции устанавливают значение переменной а объекта оЫ равной 10 и значение переменной а объекта оЬ2 равной 99. Каждый объект содержит собственную копию всех данных, объявленных в классе. Это значит, что а в оЫ отлично от а в оЬ2.



int main {) ,

myclass оЫ, оЬ2; obl.5et a(10);

ob2.set a(99); ......

cout Obl.get a() \n ; cout ob2.get a() << \n ;

return

Как и следовало ожидать, программа выводит на экран величины 10 и 99.

2. В предыдущем примере переменная а в myclass является закрытой. Это означает, что она непосредственно доступна только для членов myclass. (Это один из доводов в пользу существования открытой функции get a().) Если вы попытаетесь обратиться к закрытому члену класса из той части вашей программы, которая не является членом этого класса, то результатом будет ошибка при компиляции. Например, предположим, что myclass задан так, как показано в предыдущем примере, тогда компиляция функции main() вызовет

ошибку:

Этот фрагмент содержит ошибку ,.. ...f,..

♦include <iostreaiti>

using namespace std; . :- . .

int main {} ( . . .

myclass Л1, ob2;

оЫ.a = 10; ОШИБКА! к закрытому члену нет оЬ2.а = 99; доступа для функции - не члена

cout obl.get a() \n ;

cou ob2.get a() \n ;

return 0;

3. Точно та же. как открытые функции-члены, могут существовать и открытые переменные-члены. Например, если бы а была объявлена в открытой секции myclass, тогда к ней, как показано ниже, можно было бы обратиться из любой части программы:

int myclass::get a{)

return a;



1 ... 4 5 6 [ 7 ] 8 9 10 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика