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


 

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

36825. Мировые информационные ресурсы 444 KB
  Задание №1 Сформируйте электронный глоссарий по тематике Мировые информационные ресурсы: Блог Веб страница Интернет ресурс Информационная культура Информационное общество Информационные взаимодействия Информационные ресурсы Информационные сети Информационные системы Информационный портал Информационный потенциал общества Информация Мировые информационные ресурсы Национальные информационные ресурсы Сайт Сервис Средства массовой информации Телеконференция Файловый сервер Чат Электронная база...
36826. Получить навыки работы с электронной таблицей Microsoft Excel 170 KB
  Откройте меню настройки панелей управления Вид Панели инструментов и убедитесь в том что включено отображение только двух панелей: Стандартная и Форматирование. Чтобы настроить масштаб отображения войдите в меню Вид Масштаб. Войдите в меню Сервис Параметры. Для этого достаточно воспользоваться командой меню Правка Отменить.
36827. МОДЕЛИРОВАНИЕ реакции с диффузией в трубчатом реакторе 862.5 KB
  Поэтому математическое описание процессов протекающих в этих реакторах имеет большое значение. Рассмотрим математическое описание трубчатого реактора для проведение реакции с диффузией. Этот поток входит в реактор где одновременно с диффузией осуществляется реакция первого порядка Длина реактора L площадь его поперечного сечения 1 м2. При условии что скорость питания w м3 ч концентрация М равна с0 а коэффициент диффузии М принимается постоянный со значением D м2 ч определить концентрацию М как функцию длины реактора.
36828. ПОВЕРКА МИКРОМЕТРА 227.5 KB
  Лабораторная работа № 2 ПОВЕРКА МИКРОМЕТРА Цель работы: изучить устройство и принцип действия микрометра; получить первичные практические навыки в выполнении поверки СИ осуществить поверку микрометра определить пригодность микрометра к использованию. Устройство и принцип действия микрометра Микрометр относится к классу микрометрических измерительных инструментов принцип действия которых основан на использовании винтовой пары винт гайка позволяющей преобразовать вращательное движение микровинта в поступательное. Устройство...
36829. МНОГОМЕРНЫЕ РАСПРЕДЕЛЕНИЯ ТЕОРИИ ВЕРОЯТНОСТЕЙ И МАТЕМАТИЧЕСКОЙ СТАТИСТИКИ 124.5 KB
  Для создания таких массивов служит функция meshgrid. [XY]=meshgridxy преобразует область заданную векторами x и y в двухмерные массивы X и Y которые могут быть использованы для вычисления значений функции двух переменных и построения трехмерных графиков. Пример [XY]=meshgrid1:1:46:1:9 X = 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 Y = 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9 В этом примере формируются массивы X и Y для построения трехмерной по верхности при изменении x от 1 до 4 с шагом 1 и y от 6 до 9 с шагом 1. Пример [xy]=meshgrid3: .
36830. Исследование разборчивости речи методом артикуляционных измерений при защите речевой информации различными видами маскирующих сигналов 201.5 KB
  Звуковые колебания в жидкой и газообразной среде воздухе представляют собой продольные колебания так как частицы среды колеблются вдоль линии распространения звука. Вследствие этого образуются сгущения и разряжения среды двигающейся от источника колебаний с определенной скоростью называемой скоростью звука. Скорость звука Скорость звука является постоянной величиной для данной среды и метеорологических условий и определяется по формуле ...
36831. СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ДИАГРАММ 67 KB
  В табличном процессоре MS Excel создать документ и сохранить его в личной папке под именем ФИО_лабExcel4_группа.xls. В созданном документе выполнить все задания.
36832. РЕШЕНИЕ ОПТИМИЗАЦИОННЫХ ЗАДАЧ 1.05 MB
  В созданном документе выполнить все задания каждое задание оформлять на отдельном листе. ЗАДАНИЕ 1. ЗАДАНИЕ 2. ЗАДАНИЕ 3.