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


 

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

17604. Характеристика економічного потенціалу 342.5 KB
  ТЕМА Характеристика економічного потенціалу. План 1. Поняття та склад потенціалу національної економіки 2. Природноресурсний потенціал 3. Демографічний та трудовий потенціал 4. Науковотехнічний потенціал 5. Інформаційний потенціал 6. Виробничий потенціал ...
17605. ФУНКЦІОНУВАННЯ ІНФРАСТРУКТУРИ НАЦІОНАЛЬНОГО РИНКУ 251.5 KB
  ТЕМА: ФУНКЦІОНУВАННЯ ІНФРАСТРУКТУРИ НАЦІОНАЛЬНОГО РИНКУ План 1 Національний ринок України і його проблеми 2. Проблеми національного ринку 3. Сутність і функціонуеання ринкової інфраструктури 4. Вплив ринкової інфраструктури на формування конкурентного середов
17606. ДЕРЖАВНІСТЬ ТА ДЕРЖАНИЕ УПРАВЛННЯ ЕКОНОМІКОЮ 183 KB
  ТЕМА:ДЕРЖАВНІСТЬ ТА ДЕРЖАНИЕ УПРАВЛННЯ ЕКОНОМІКОЮ ПЛАН Українська держава та її засади 2. Місце держави в управлінні економікою Українська держава та її засади Історія країн засвідчує що успіхи одних і невдачі інших проглядаються через пр...
17607. ДЕМОКРАТІЯ, ЕКОНОМІЧНА СВОБОДА ТА ЕКОНОМІЧНИЙ ПОРЯДОК 144.5 KB
  ТЕМА: ДЕМОКРАТІЯ ЕКОНОМІЧНА СВОБОДА ТА ЕКОНОМІЧНИЙ ПОРЯДОК План Сутність демократії та її місце в самоуправлінні економікою Економічна свобода і її основи 3. Економічний порядок як система узгоджених інтересів Сутність демократії та її місце
17608. ТЕОРІЯ СУСПІЛЬНОГО ДОБРОБУТУ ТА СОЦІАЛЬНО-РИНКОВОЇ ЕКОНОМІКИ 209.5 KB
  ТЕМА: ТЕОРІЯ СУСПІЛЬНОГО ДОБРОБУТУ ТА СОЦІАЛЬНОРИНКОВОЇ ЕКОНОМІКИ ПЛАН 1. Суспільні потреби як соціальна база добробуту 2. Національний продукт як виробнича база добробуту 3. Засади соціальноринкової економіки 4. Становления ринкового механізму ціноутворення ...
17609. СТРУКТУРНА ПЕРЕБУДОВА НАЦІОНАЛЬНОЇ ЕКОНОМІКИ 275 KB
  ТЕМА : СТРУКТУРНА ПЕРЕБУДОВА НАЦІОНАЛЬНОЇ ЕКОНОМІКИ План Формування ринкових відносин Стратегія структурних перетворень Капіталовкладення і реструктуризація основного капіталу зайнятості та національного продукту Мікроекономічна с
17610. Політика економічного зростання в національній економіці 3.27 MB
  Тема: Політика економічного зростання в національній економіці. План 1. Економічне зростання як категорія національної економіки 2. Типи та способи економічного зростання 3. Фактори економічного зростання 1. Економічне зростання як категорія національної
17611. ІНСТИТУЦІОНАЛЬНІ ФОРМИ ІНТЕГРАЦІЇ У СВІТОВЕ ГОСПОДАРСТВО 206 KB
  ТЕМА: ІНСТИТУЦІОНАЛЬНІ ФОРМИ ІНТЕГРАЦІЇ У СВІТОВЕ ГОСПОДАРСТВО План 1. Світове господарство: структура тенденції розвитку. Показники відкритості економіки 2. Форми і механізми інтеграції національної економіки у світове господарство 3. Ек...
17612. ІНСТИТУЦІЙНІ ЧИННИКИ РОЗВИТКУ НАЦІОНАЛЬНОЇ ЕКОНОМІКИ 148 KB
  Тема: ІНСТИТУЦІЙНІ ЧИННИКИ РОЗВИТКУ НАЦІОНАЛЬНОЇ ЕКОНОМІКИ План 1. Інститути права управління і власності 2. Власність в умовах ринку 3. Упорядкування приватизаціі в Україні 1. Інститути права управління і власності Однією з найважливіших проблем націо...