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


 

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

79648. РЕСУРСОСБЕРЕГАЮЩАЯ ТЕХНОЛОГИЯ АНАЛИЗА НАПРЯЖЕННО-ДЕФОРМИРОВАННОГО СОСТОЯНИЯ УПРУГОГО ТЕЛА ПРИ ПРОИЗВОЛЬНЫХ НЕПРЕРЫВНЫХ ОБЪЕМНЫХ СИЛАХ 379.5 KB
  Выполнен анализ напряженно-деформированного состояния НДС шара деформируемого непотенциальными силами. Традиционные методы вариационные граничных интегральных уравнений анализа НДС линейного изотропного упругого тела учитывают объемные силы в их потенциальном варианте.
79649. ПРОБЛЕМЫ ОБЕСПЕЧЕНИЯ ФОРМИРОВАНИЯ ГОСУДАРСТВЕННОЙ СОБСТВЕННОСТИ СУБЪЕКТА РОССИЙСКОЙ ФЕДЕРАЦИИ ЗА СЧЕТ ПУБЛИЧНЫХ НАЛОГОВЫХ ДОХОДОВ 81.5 KB
  В частности в бюджеты субъектов Российской Федерации подлежат зачислению налоговые доходы от следующих региональных налогов по нормативу 100 процентов: от налогов на имущество организаций на игорный бизнес от транспортного налога.
79650. Порядок формирования и структура федеральной и региональных нотариальных палат 188.5 KB
  Основ законодательства о нотариате нотариус занимающийся частной практикой должен быть членом нотариальной палаты. Кроме того членами нотариальной палаты могут быть также лица получившие или желающие получить лицензию на право нотариальной деятельности однако для них членство...
79651. ПОРЯДОК ОТБОРА ИНВЕСТИЦИОННЫХ ПРОЕКТОВ, ОСУЩЕСТВЛЯЕМЫХ НА УСЛОВИЯХ ГОСУДАРСТВЕННО-ЧАСТНОГО ПАРТНЕРСТВА В СОВРЕМЕННОЙ РОССИИ 101 KB
  Государственная поддержка инвестиционных проектов осуществляемых на условиях государственно-частного партнерства предоставляется для реализации инвестиционных проектов направленных: на социально-экономическое развитие Российской Федерации в части создания и или развития...
79652. ПРАВА И ОБЯЗАННОСТИ ЛИЦ, УЧАСТВУЮЩИХ В ИСПОЛНИТЕЛЬНОМ ПРОИЗВОДСТВЕ 133 KB
  Взыскатель имеет право: просить судебного пристава-исполнителя о немедленном наложении после возбуждения исполнительного производства ареста на имущество и денежные средства должника; знать где находится исполнительный документ в тот или иной момент поскольку на судебном...
79653. ПОДХОД К ВЫРАБОТКЕ ЕДИНОГО ПОНЯТИЯ «КИБЕРТЕРРОРИЗМ» (НАУЧНОЕ ОБОСНОВАНИЕ, СРАВНИТЕЛЬНАЯ ХАРАКТЕРИСТИКА) 122.5 KB
  Проблема кибертерроризма существует относительно недавно, поэтому она не вошла в законодательство большинства ведущих стран мира, в том числе России. Это связано с тем, что до сих пор не выработано единое понятие (научная дефиниция) нового вида правонарушения.
79654. Особенности формы договора займа, заключаемого кредитным потребительским кооперативом граждан со своими членами 92 KB
  Вторая особенность формы договора займа, заключаемого кредитным потребительским кооперативом граждан со своими членами, состоит в последствиях ее несоблюдения. Так, в соответствии с п. 2 ст. 17 Закона о кредитных потребительских кооперативах граждан несоблюдение письменной формы договора займа влечет его недействительность.
79655. ВАЛЮТНЫЕ ОПЕРАЦИИ. ОБЩАЯ ХАРАКТЕРИСТИКА 136.5 KB
  Согласно действовавшему ранее Закону Российской Федерации от 9 октября 1992 г. Порядок и условия отнесения изделий из драгоценных металлов и природных драгоценных камней к ювелирным и другим бытовым изделиям и лому таких изделий устанавливаются Правительством Российской Федерации.
79656. ОРГАНИЗАЦИОННАЯ СТРУКТУРА НАЛОГОВЫХ ОРГАНОВ ЗАРУБЕЖНЫХ СТРАН. МОДЕЛИ ОРГАНИЗАЦИОННОЙ СТРУКТУРЫ НАЛОГОВЫХ ОРГАНОВ 105 KB
  В течение последних 20-30 лет к организации внутренней структуры национальных налоговых администраций отчетливо выделились три подхода: модель вид налога; функциональная модель; модель вид налогоплательщика. Наиболее ранняя модель организационной структуры налоговых органов...