Типы данных С++

Автор работы: Пользователь скрыл имя, 19 Февраля 2012 в 20:06, курсовая работа

Описание работы

Разрабатывая Си с классами, позднее Си++, Страуструп также написал программу Cfront, транслятор, который перерабатывал исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для самого автора, приобрел большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

Содержание работы

Введение………………………………………………………………………………..3
Основная часть…………………………………………………………………………5
Типы данных С++…………………………………………………………………..5
1.1 Литералы…………………………………………………………………………...5
1.2 Переменные………………………………………………………………………...9
1.3 Указатели………………………………………………………………………….12
Строковые типы…………………………………………………………………..14
Классы……………………………………………………………………………..15
2.1 Определение класса………………………………………………………………15
2.2 Друзья……………………………………………………………………………..16
Объекты классов………………………………………………………………….18
Библиотека iostream……………………………………………………………….20
Заключение……………………………………………………………………………23
Глоссарий……………………………………………………………………………..25
Список использованных источников…………………

Файлы: 1 файл

программирование (классы).doc

— 350.00 Кб (Скачать файл)

}

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

2.3 Объекты классов.

     Определение класса, например Screen, не приводит к  выделению памяти. Память выделяется только тогда, когда определяется объект типа класса. Так, если имеется следующая реализация Screen:

class Screen {

public:

    // функции-члены

private:

  string           _screen;

  string:size_type _cursor;

    short            _height;

    short            _width;

};

то определение:

Screen myScreen;

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

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

class Screen {

   // список членов

};

int main()

{

   Screen mainScreen;

}

Тип Screen объявлен в глобальной области видимости, тогда как объект mainScreen объявлен в локальной области функции main().

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

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

Screen bufScreen = myScreen;

// bufScreen._height = myScreen._height;

// bufScreen._width = myScreen._width;

// bufScreen._cursor = myScreen._cursor;

// bufScreen._screen = myScreen._screen;

     Указатели и ссылки на объекты класса также можно объявлять. Указатель на тип класса разрешается инициализировать адресом объекта того же класса или присвоить ему такой адрес. Аналогично ссылка инициализируется первым значением объекта того же класса.

     Для доступа к данным или функциям-членам объекта класса следует пользоваться соответствующими операторами. Оператор "точка" (.) применяется тогда, когда операндом является сам объект или ссылка на него; а "стрелка"(->) – когда операндом служит указатель на объект:

#include "Screen.h" 

bool isEqual( Screen& s1, Screen *s2 )

{ // возвращает false, если  объекты не равны,  и true - если равны 

   if (s1.height() != s2->height() ||

       s2.width() != s2->width() )

          return false; 

   for ( int ix = 0; ix < s1.height(); ++ix )

      for ( int jy = 0; jy < s2->width(); ++jy )

         if ( s1.get( ix, jy ) != s2->get( ix, jy ) )

            return false; 

   return true;   

}

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

     3. Библиотека iostream.

     Частью  стандартной библиотеки C++ является библиотека iostream – объектно-ориентированная  иерархия классов, где используется и множественное, и виртуальное наследование10. В ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Кроме того, разработчики классов могут расширять эту библиотеку для чтения и записи новых типов данных.

     Для использования библиотеки iostream в  программе необходимо включить заголовочный файл

#include <iostream>

     Операции  ввода/вывода выполняются с помощью классов istream - потоковый ввод и ostream - потоковый вывод. Третий класс, iostream, является производным от них и поддерживает двунаправленный ввод/вывод. Для удобства в библиотеке определены три стандартных объекта-потока:

  • cin – объект класса istream, соответствующий стандартному вводу. В общем случае он позволяет читать данные с терминала пользователя;
  • cout – объект класса ostream, соответствующий стандартному выводу. В общем случае он позволяет выводить данные на терминал пользователя;
  • cerr – объект класса ostream, соответствующий стандартному выводу для ошибок. В этот поток мы направляем сообщения об ошибках программы.

Вывод осуществляется, как правило, с помощью  перегруженного оператора сдвига влево (<<), а ввод – с помощью оператора  сдвига вправо (>>):

#include <iostream>

#include <string>

int main()

{

   string in_string;

   // вывести литерал  на терминал

  cout << "Введите  имя пожалуйста- ";

   // прочитать ответ  пользователя в  in_string

   cin >>  in_string;

   if ( in_string.empty() )

      // вывести сообщение об ошибке на терминал

      cerr << "ошибка: данная строка пустая!\n";

   else cout << "Привет " << in_string << "!\n";

}

     Помимо  чтения с терминала и записи на него, библиотека iostream так же поддерживает чтение и запись в файлы. Для этого предназначены следующие классы:

  • ifstream, производный от istream, связывает ввод программы с файлом;
  • ofstream, производный от ostream, связывает вывод программы с файлом;
  • fstream, производный от iostream, связывает как ввод, так и вывод программы с файлом.

     Чтобы использовать часть библиотеки iostream, связанную с файловым вводом/выводом, необходимо включить в программу заголовочный файл:

#include <fstream>

Файл fstream уже включает iostream, так что включать оба файла вовсе необязательно.

     Библиотека iostream поддерживает также ввод/вывод  в область памяти, при этом поток  связывается со строкой в памяти программы. С помощью потоковых операторов ввода/вывода мы можем записывать данные в эту строку и читать их оттуда. Объект для строкового ввода/вывода определяется как экземпляр одного из следующих классов:

  • istringstream, производный от istream, читает из строки;
  • ostringstream, производный от ostream, пишет в строку;
  • stringstream, производный от iostream, выполняет как чтение, так и запись.

Для использования  любого из этих классов в программу  нужно включить заголовочный файл:

#include <sstream>

Файл sstream так же включает iostream.

     Заключение

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

  • Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы).
  • Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.
  • Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов.
  • Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования — при необходимости язык позволяет обеспечить максимальную эффективность программы.
  • Имеется возможность работы на низком уровне с памятью, адресами.

Но на ряду с плюсами язык С++ имеет несколько недостатков, такие как:

  • Сложность и избыточность, из-за которых C++ трудно изучать, а построение компилятора сопряжено с большим количеством проблем.
  • Метапрограммирование на основе шаблонов C++ сложно и при этом ограничено в возможностях. Оно состоит в реализации средствами шаблонов C++ интерпретатора примитивного функционального языка программирования, выполняющегося во время компиляции.

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

     Но  все эти недостатки со временем исчезают, так как язык С++ постоянно улучшается и становится более удобным.

     Глоссарий

№ п/п Понятие Определение
    1
Функции-друзья это функции, которые  не являются функциями-членами и  тем не менее имеющие доступ к  защищённым и закрытым членам класса.
2 Наследник
    это больше чем  базовый класс, поэтому, если наследование открытое, он может использоваться всюду, где используется базовый  класс, но не наоборот.
3 Полиморфизм
    возможность объектов с одинаковой спецификацией иметь  различную реализацию.
4 Конструктор
    специальный блок инструкций, вызываемый при создании объекта.
5 Деструктор
    специальный метод  класса, служащий для деинициализации  объекта
6 Инкапсуляция
    свойство языка  программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента, а взаимодействовать с ним посредством предоставляемого интерфейса, а также объединить и защитить жизненно важные для компонента данные.
7 Наследование
    механизм объектно-ориентированного программирования,  позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.
8 Класс
    разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения.
9 Итератор
     объект, позволяющий  программисту перебирать все  элементы коллекции без учёта  особенностей её реализации.
10 Контейнер
    структура (АТД), позволяющая инкапсулировать в  себя объекты разных типов.

Информация о работе Типы данных С++