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, куда  добавлены все необходимые компоненты.


 

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

79200. Общая характеристика преступлений против свободы, чести и достоинства личности 31.93 KB
  Отнесение рассматриваемой главы к разделу о преступлениях против личности которым открывается Особенная часть УК РФ вытекает из конституционных положений об охране свободы защите своей чести и доброго имени достоинства личности например ст. 126128 УК РФ; б честь и достоинство человека включая оценку его личности окружающими и им самим ст.
79201. Похищение человека. Состав и виды. Отличие от незаконного лишения свободы 34.79 KB
  Под похищением человека ст. Но при всех условиях похищение признается оконченным с момента захвата похищенного лица т. Наказание за похищение значительно усиливается при наличии квалифицирующих обстоятельств ч.
79202. Клевета. Состав и виды. Отличие от ложного доноса 34.68 KB
  С объективной стороны клевета определяется как распространение заведомо ложных сведений порочащих честь и достоинство другого лица или подрывающих его репутацию. Имеются в виду измышления заведомо ложные сведения подрывающие положительную оценку окружающими общественным мнением личности и его деятельности как не соответствующих этическим правовым профессиональным критериям. Обязательный элемент понятия клеветы распространение заведомо ложных сведений компрометирующих человека в устной или письменной форме в том числе в официальном...
79203. Общая характеристика преступлений против половой неприкосновенности и половой свободы личности 32.66 KB
  Разновидностью преступлений против личности являются общественно опасные посягательства на половую неприкосновенность и половую свободу человека. Видовым объектом преступлений являются общественные отношения обеспечивающие половую неприкосновенность и половую свободу личности. Непосредственным объектом выступают отношения связанные с посягательством на половую неприкосновенность и половую свободу конкретной личности нарушенные общественно опасным действием. Половые преступления в зависимости от непосредственного объекта можно подразделить...
79204. Изнасилование. Состав и виды 31.04 KB
  Беспомощное состояние потерпевшей при изнасиловании может выражаться в том что она: 1 не могла понимать характера и значения совершаемых действий в силу своего физического или психического состояния малолетства душевного расстройства беспамятства или иного болезненного состояния; 2 понимала характер совершаемых в отношении ее действий но не могла оказать сопротивления виновному физические недостатки сильное опьянение и т. Виновный же должен осознавать беспомощное состояние потерпевшей вне зависимости от того привел ли он сам...
79205. Насильственные действия сексуального характера. Состав и виды 29.74 KB
  Насильственные действия сексуального характера ст. Состав преступления предусмотренный этой статьей охватывает насильственное мужеложство и лесбиянство а также иные насильственные действия сексуального характера с применением или угрозой применения насилия либо с использованием беспомощного состояния потерпевшей потерпевшего. Под иными действиями сексуального характера понимаются любые кроме мужеложства и лесбиянства способы удовлетворения полового желания в извращенной форме.
79206. Общая характеристика преступлений против конституционных прав и свобод 33.74 KB
  В главе 19 УК РФ объединены уголовноправовые нормы о преступлениях посягающих на конституционные права и свободы человека и гражданина. Безусловно в данной главе помещены не все нормы охраняющие права и свободы человека и гражданина поскольку например жизнь здоровье охраняются нормами включенными в гл. Все охраняемые уголовным законом конституционные права и свободы человека и гражданина несмотря на их разобщенность по главам образуют видовой объект преступления совокупность конституционных прав и свобод. Субъективная сторона...
79207. Нарушение неприкосновенности частной жизни 29.9 KB
  Нарушения неприкосновенности частной жизни ст. собирать и распространять сведения о частной жизни человека без его согласия.
79208. Нарушение неприкосновенности жилища 34.29 KB
  Конституции РФ никто не вправе проникать в жилище против воли проживающих в нем лиц иначе как в случаях установленных федеральным законом или на основании судебного решения. 139 выражается в незаконном проникновении в жилище против воли проживающего в нем лица. 139 под жилищем понимаются индивидуальный жилой дом с входящими в него жилыми и нежилыми помещениями жилое помещение независимо от формы собственности входящее в жилищный фонд и пригодное для постоянного или временного проживания а равно иное помещение или строение не входящие...