89789

Конструкции классов и области видимости

Лекция

Информатика, кибернетика и программирование

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

Русский

2015-05-13

95.26 KB

1 чел.

Конструкции классов и области видимости

Содержание:

  1.  Конструкции классов
  •  struct
  •  union
  •  class
  1.  Области видимости
  •  public
  •  protected
  •  private
  1.  Сокрытие методов класса

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

Класс можно определить с помощью следующих ключей:

struct – структура

union объединение

class  –класс

Конструкция класса:

ключ-класса имя_класса {список_компонентов};

где список компонентов класса может включать:

  •  Типизированные данные
  •  Функции
  •  Классы
  •  Перечисления
  •  Битовые поля
  •  Дружественные функции и классы
  •  Имена типов

Структура struct

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

Пример #1. Комплексное число

Опишем класс «комплексное число», где компонентами будут:

  •  Вещественная часть числа
  •  Мнимая часть числа
  •  Функция ввода комплексного числа
  •  Функция вывода на экран комплексного числа

Определение и описание объектов (экземпляров) класса:

complex X1, X2, D;
complex *point=&D;//указатель на объект класса
complex dim[8];//массив объектов класса

Обращение к компонентам класса

  1.  С помощью «квалифицированных» имен:

имя_объекта.имя_класса::имя_компоненты

  1.  Через уточненное имя

имя_объекта.имя_ компоненты

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

указатель_на_объект_класса->имя_ компоненты

Например:

X1.complex::real=dim[3].real=1.24;

X1.imag=2.3; dim[3].imag=0.0;

X1.define();//параметры выбираются 

//по умолчанию real=0.0, imag=0.0

X2.define(4.3,20.0);//комплексное число 4.3+20.0*i

X2.display();

//Оператор указателя на структуру

point->real=2.3;

point->imag=6.1;

point->display();

return 0;

Области видимости:

private собственные, доступные только внутри класса; 

protected –защищенные, доступные еще в дочерних классах;

public общедоступные.

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

Пример:

//Complex1.cpp

#include <iostream.h>

//класс с конструктором и инкапсуляцией данных

struct complex{// общедоступные компоненты

complex (double re=1.0, double im=0.0)

{ real=re; imag=im; }

void display(void)

{ std::cout<<“real=“<<real<< “, imag=“<<imag<<“\n”; }

//получить доступ к вещественной и мнимой части числа

double& re(void){ return real; }  //возвращает ссылки на вещ. 

double& im(void){ return imag; } //и мнимую части объекта

private: //данные класса скрыты

double real; //вещественная часть

double imag; // мнимая часть

} ;

int  main()   

{

complex a,b(1.5,2.5),c(2.8);

a.display();

std::cout<<b.im()<<“ “<<b.re()<<“\n”;

c.display();

return 0;

}

Объединение union

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

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

Пример #2. Дни недели

#include <iostream.h>

int main(){

enum week {sun, mon, tues, weds, thurs, fri, sat};

union st{    int i; week w;};

st f={5};      // тоже, что и f.i=5;

if (f.w==sat || f.w==sun) std::cout<<“Выходной!”;

return 0;

}

Пример #3.1 Дни недели

#include <iostream.h>

int main(){

enum week {sun, mon, tues, weds, thurs, fri, sat};

union st{ int i; week w; st() {w=mon;};

void define (week im) { w=im; };

void display(void){ cout<<"i="<<i; };};

st f, g; f.display(); f.i=6;

if (f.w==sat || f.w==sun) cout<<"Выходной!";

g.define(sun);  g.display();

return 0;

}

Пример #3.2 Дни недели

#include <iostream.h>

int main(){

enum week {sun, mon, tues, weds, thurs, fri, sat};

union st{ private: int i; week w;

public: st() {w=mon;}; week &ww(){return w;}

void ii(int a){i=a;}

void define (week im) { w=im; };

void display(void){ cout<<"i="<<i; };};

st f, g; f.display(); f.ii(6);

if (f.ww()==sat || f.ww()==sun) cout<<"Выходной!";

g.define(sun); g.display();

return 0;}

По сравнению со структурами на объединения налагаются некоторые ограничения:

  •  объединение может инициализироваться только значением его первого элемента;
  •  объединение не может содержать битовые поля;
  •  объединение не может содержать виртуальные методы, конструкторы деструкторы и операцию присваивания;
  •  объединение не может входить в иерархию классов.

Класс class

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

Пример:

//Complex.cpp

#include <iostream.h>

//класс с конструктором и инкапсуляцией данных

class complex{

double real; //вещественная часть

double imag;// мнимая часть

public:

complex (double re=1.0, double im=0.0)

{ real=re; imag=im; }

void display(void)

{ cout<<“real=“<<real; cout << “, imag=“<<imag; }

double& re(void){ return real; }//возвращает ссылки на вещ. 

double& im(void){ return imag; }//и мнимую части объекта

};

int main(void)

{

complex a,b(1.5,2.5),c(2.8);

a.display;

cout<<b.im()<<b.re();

c.display();

return 0;

}

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

Как и в C, важно различать интерфейсные файлы (имеющие расширение ".h") и файлы реализации (расширение зависит от системы, например.cpp”). 

// файл complex.h

#ifndef COMPH

#define COMPH 

// описание класса

#endif

Интерфейсный файл может содержать описания более чем одного класса (если классы тесно связаны). Языки C и C++ используют условное подключение файла: когда файл complex.h считывается впервые, символ COMPH (предполагается, что он не встречается в других местах) является неопределенным, и тем самым срабатывает условный оператор ifndef (если не определено). Значит, файл complex.h будет считан. При всех последующих попытках считать этот файл символ будет известен, и загрузка файла будет пропущена. 

Файл реализации complex.cpp для данного класса должен обеспечить работу методов, описанных в интерфейсном файле. 

#include <iostream.h>

#include "complex.h"

complex::complex (double re, double im)

{real=re; imag=im;};

void complex::display(void)

{cout<<real<<“+”<<imag<<“ *i ”;};

double& complex::re(void){return real;};

double& complex::im(void){return imag;};

Файл, включающий заголовочный файл complex.h:

#include "complex.h"

int main(void){

complex G(1.0,2.5);

//G.complex(1.0, 2.5); - так нельзя!

G.display();

return 0;

}

Затем complex.cpp компилируем и получаем objфайл.

Этот файл на стадии компоновки (команда link.exe) объединяет все объектные модули с главным модулем (файл с функцией main), а также со стандартными библиотеками языка С++, и получаем запускающий exe-файл.

С этой целью удобнее создавать файл проекта с расширением prj, куда  добавлены все необходимые компоненты.


 

А также другие работы, которые могут Вас заинтересовать

20481. Детальний розгляд критичних етапів життєвого циклу. Принципи структурного аналізу 34 KB
  Принципи структурного аналізу. Всі методології структурного аналізу базуються на ряді загальних принципів частина з яких регламентує організацію робіт на початкових етапах ЖЦ а частина використовується при виробленні рекомендацій щодо організації робіт. В якості двох базових принципів використовуються наступні: принцип розділяй і володарюй і принцип ієрархічного упорядкування. Перший є принципом вирішення важких проблем шляхом розбиття їх на безліч менших незалежних завдань легких для розуміння і вирішення.
20482. Совокупное предложение и кривая 94 KB
  Совокупное предложение базируется на производственных возможностях национальной экономики. Оно является функцией экономики от доступных на текущий момент факторов производства, технологии и уровня цен. В процессе анализа совокупного предложения важно различать совокупное предложение в краткосрочном и долгосрочном периодах.
20483. Діаграми “сутність-зв’язок”. Основні означення та терміни. Нотація Чена 55.5 KB
  Модель сутністьзв'язок ERмодель англ. Entityrelationship model або entityrelationship diagram модель даних яка дозволяє описувати концептуальні схеми за допомогою узагальнених конструкцій блоків. ERмодель це метамодель даних тобто засіб опису моделей даних. ERмодель зручна при проектуванні інформаційних систем баз даних архітектур комп'ютерних застосунків та інших систем моделей.
20484. Діаграми атрибутів. Категоризація сутностей 38 KB
  Діаграми випадків використання описують взаємозвязки і залежності між групою випадків використання і акторами що беруть участь у процесі. Важливо зауважити що діаграми випадків використання не призначено для показу компонування вони не можуть описати внутрішню структуру системи. Діаграми випадків використання призначено для полегшення обміну інформацією між майбутніми користувачами системи і замовником вони особливо корисні для визначення переліку можливостей які повинна мати система. За діаграмами випадків використання можна...
20485. Діаграми потоків даних. Основні означення та символи 29 KB
  Діаграма потоків даних англ. Data Flow Diagram графічне представлення потоків даних в інформаційній системі. Діаграма потоків даних також може використовуватись для представлення обробки даних структурна розробка.
20486. Закони булевої алгебри 28 KB
  Конюнкцією висловлень А і В називаємо висловлення А^В буде істинним тоді і тільки тоді коли обидва висловлення істинні. Дизюнкцією висловлень А і В називаються висловлення АvВ в якій буде істина тоді і лише тоді коли істинне хоча б одне із висловлень. Імплікацією висловлень А і В називається таке висловлення АВ яке буде хибне тоді і лише тоді коли А істинне В хибне. Заперечення висловлення А називається складне висловлення А яке буде істинне тоді і лише тоді коли А хибне і хибним тоді коли а істинне.
20487. Запити, типи запитів, обчислення в запитах 32 KB
  Запити дозволяють обраховувати підсумкові значення і виводити їх у компактному форматі а також виконувати обчислення над групами записів. Запити можна створювати самостійно і за допомогою майстра. Майстри запитів автоматично виконують основні дії залежно від відповідей користувача на поставлені питання.
20488. Засоби структурного аналізу та їх взаємовідносини 36 KB
  принципова схема технологічного процесу на складі; транспортнотехнологічна схема переробки вантажів на складі; технологічна карта роботи складу; технологічний графік роботи складу; опис стандартних процедур складського процесу; мережеві моделі складських процесів а також ряд інших засобів моделювання процесів; технологічні планування складів; карти організації праці окремих категорій працівників складу. Правильно організований технологічний процес роботи складу повинен забезпечувати: чітке і своєчасне проведення кількісного...
20489. Зведення системи лінійних рівнянь до зручного для ітерацій вигляду 78 KB
  Ітераційними називають такі методи які дають змогу знайти наближений розв'язок системи із заздалегідь указаною точністю шляхом виконання скінченої кількості арифметичних операцій хоч самі обчислення можуть проводитись і без округлень а коефіцієнти і вільні члени системи бути точними числами. Точний розв'язок системи за допомогою ітераційних методів можна знайти тільки теоретично як границю збіжного нескінченного процесу. Розв'язуючи системи рівнянь ітераційними методами крім похибок округлення треба враховувати також похибку методу....