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

Многофайловые программы. Межфайловое взаимодействие классов

Читайте также:
  1. Алекс сидел за ограждением позади сцены, где фанатов не было, и давал интервью для какой-то программы.
  2. Бактериофаги. Взаимодействие фага с бактериальной клеткой. Умеренные и вирулентные бактериофаги. Лизогения.
  3. Взаимодействие в месте приложения действия.
  4. Взаимодействие валеологии с другими науками
  5. Взаимодействие внутри большой семьи
  6. Взаимодействие государства и права
  7. ВЗАИМОДЕЙСТВИЕ ГОСУДАРСТВА С ПОЛИТИЧЕСКИМИ ПАРТИЯМИ И ИНЫМИ ОБЪЕДИНЕНИЯМИ ГРАЖДАН
  8. Взаимодействие гребного винта и корпуса судна. Пропульсивный коэффициент
  9. Взаимодействие дефектов кристаллического строения
  10. Взаимодействие досуга и рекреации.
  11. Взаимодействие зарядов. Закон Кулона. Закон сохранение электрического заряда.
  12. Взаимодействие заряженных тел. Закон Кулона. Закон сохранения электрического заряда.

Классы отличаются от простых переменных тем, что определение класса не подразумевает резервирования памяти. Оно разве что информирует компилятор о том, что именно входит в класс. Это примерно как оговаривать, сколько байтов резервировать под переменную типа int, с той лишь разницей, что компилятор уже знаком с int, но не знаком с типом someCLass, пока вы его не определите.

Определение класса содержит определения или объявления всех его членов:

class someClass //определение класса

{

private:

int memVar; //определение компонентной переменной

public:

int memFunc(int, int); //объявление метода

};

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

class someClass; //объявление класса

Не путайте определение класса с определением (созданием) объекта класса:


someClass anObJ;

 

В отличие от определения класса, определение объекта подразумевает резер-
вирование памяти для его размещения,

Классы ведут себя в межфайловых отношениях не так, как переменные и
функции, Чтобы иметь доступ к классу из любого файла, входящего в програм-
му, необходимо определять (а не просто объявлять) класс в каждом файле,
Определение класса в файле A и объявление его в файле B не означает, что
компилятор сможет создать в файле B объекты данного класса.

Почему же все так строго с классами? Дело в том, что компилятору необхо-
димо знать тип данных всего, что он компилирует. Объявления для переменных
достаточно потому, что в нем указывается уже известный тип.

//объявление

extern int someVar; //видя объявление.

someVar = 3; // компилятор может обработать это.

Объявление функции тоже рассказывает компилятору обо всех типах исполь-
зуемых данных.

//объявление

int someFunc(int, int); //видя объявление.

var1 = someFunc(var2,var3); //компилятор может обработать это.

Что касается класса, то требуется именно его определение, чтобы указать все
типы используемых данных и методов.

//определение

class someClass //видя определение, компилятор

{

private:

int memVar;
public:
int memFunc(int, int);

};

someClass someObj; //может обработать это

v1 = someObj.memFunc(v2, v3); //и это

 

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

Невозможно определить класс дважды в одном исходном файле, но каждый
исходный файл может иметь свое определение того же класса. На самом деле,
конечно, файлу нужно определение класса, только если в нем этот класс исполь-
зуется. В следующем параграфе мы покажем более правильный способ межфай-
ловой коммуникации классов — с использованием заголовочных файлов.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)