Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Объявление структур, объединений, перечислений




В С++ введен упрощенный синтаксис для определения переменных, типа структур, объединений и перечислений, в котором можно опускать ключевые слова struct, union, enum.

//C

enum day{sun,mon,tue,wen};

struct path{char str[30];

enum day Week;}

struct path Link;

//C++

enum day{sun,mon,tue,wen};

struct path{char str[30];

day Week;}

path List;

Допускается использовать неименованные перечисления и объявления, что тоже делает синтаксис более простым и логичным.

struct Goods{

char *name;

union{double d, long l, int i)};

};

Нововведениями Си++ в сравнении с Си являются:
поддержка объектно-ориентированного программирования;
поддержка обобщённого программирования через шаблоны;
дополнительные типы данных;
исключения;
пространства имён;
встраиваемые функции;
перегрузка операторов;
перегрузка имён функций;
ссылки и операторы управления свободно распределяемой памятью;
дополнения к стандартной библиотеке.

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


Классы и объекты. Определение класса и области видимости. Опережающее объявление класса

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

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

В языке в С++ поддерживается 2 области видимости: область видимости файла, локальная область видимости, область видимости класса. Объявленные в области видимости файла видны до конца файла. Локальная область видимости – в ней видны только в этом блоке. Локальное объявление перекрывает глобальное. Член-данные и методы класса видны только в видимости класса. Вне его требуется уточнение имени объекта или класса.

Для ограничения доступа используется 3 спецификатора: public, private и protected. Член класса виден и может быть использован во всем классе независимо от точки объявления, а в определении класса и до своего определения.

int var;

class Ex

{

public:

f(){var =0};

private:

int var; //речь будет идти об этой переменной

}

Член функция класса имеет область видимости класса и определяет собственную локальную область видимости аналогично обычной функции С.

class Point2D

{

double x,y;

public:

Point2D(double x, double y)

{

Point2D::x=x;

Point2D::y=y;

}

}

Опережающее объявление класса

exteen int count;

struct POINT;

class Point2D;

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


Использование спецификатора класса памяти static.

Статические компоненты класса

Типы памяти

  1. Статические объекты создаются и инициализируются в статическом сегменте данных и остается там не меняя своего положения до конца программы.
  2. К автоматическому классу памяти относятся переменные, типы класса. Автоматические объекты создаются в стеке и завершают свое существование при выходе из программы.
  3. Динамические создаются, инициализируются и уничтожаются по требованию программиста. Они создаются в С++ при помощи new и delete.

Иногда возникает необходимость, чтобы все объекты имели доступ к какой-то одной общей переменной, а не копии переменной в каждом объекте. Эта переменная, например, может быть счетчиком, флажком и другое. Для того, чтобы элемент данного класса разделял всеми объектами данного класса и находилось в фиксированном месте в памяти, его нужно объявить с ключевым словом static.

class Point2D

{

double x,y;

static int count;

public:

Point2D(double x, double y)

{

x=_x;

y=_y;

count++;

}

~Point2D()

{

count--;

}

};

//point2d.cpp

int Point2D::count;

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

//получение доступа к объекту

cout<<Point2D::Count<<”\n”;

Для открытия доступа к открытому или защищенному типу, должна быть предусмотрена открытая статическая член-функция, которая должна вызываться с добавлением перед ее именем имени класса.

static int GetCount()

{

return count;

}

cout<<Point2D::GetCount();

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

Замечания: в создании и инициализации статических данных происходит при запуске программы в порядке поступления их определений на вход компоновщика. Однако не следует проектировать программу так, чтобы их работа зависела от порядка создания и инициализации статических данных.

 

 






Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 631 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2349 - | 2104 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.