- •Введение
- •Глава 1. Основы.
- •Int main()
- •1.2. Методика создания программ в Microsoft Visual Studio.
- •Void main(){
- •1.3. Ввод-вывод.
- •1.4. Переменные и константы.
- •Int I; // объявление целочисленной переменной
- •42 // Десятичная константа
- •0X42 // шестнадцатеричная константа, начинается с 0х
- •042 // Восьмеричная константа, начинается с 0
- •1.5. Арифметические операции.
- •Void main()
- •1.6. Встроенные функции. Математические функции. Состав math.H.
- •Void main()
- •Int rand(void); // функция используется без аргумента
- •Глава 2. Операторы и выражения.
- •2.1. Логические выражения и операторы
- •2.1.1. Оператор if else
- •If (условие)
- •If (условие)
- •2.1.2. Конструкция if else if
- •Int number;
- •Int number;
- •2.1.3. Условный оператор.
- •2.1.4. Оператор switch.
- •Int dvalue;
- •2.2. Операторы цикла.
- •2.2.1. Оператор for
- •Void main()
- •Int I; // создаем переменную цикла
- •Void main()
- •Int I; // переменную цикла можно определить и вне цикла
- •2.2.2. Изменение шага цикла
- •Void main()
- •2.2.3. Цикл while.
- •2.2.4. Цикл do while
- •Void main()
- •2.3. Операторы break и continue
- •Void main()
- •Void main()
- •2.4. Типичные ошибки при использовании операторов цикла
- •Глава 3. Производные типы данных.
- •3.1. Ссылки и указатели.
- •Int test; // объявили целочисленную переменную
- •Int & s_test; // ошибка! ссылка не связана с переменной
- •Int *p1; // объявлен указатель на целое с именем p1
- •3.2. Массивы и строки.
- •Int z[10]; //массив из 10 целых чисел
- •Int ar[3]; // объявлен целочисленный массив из 3 элементов
- •Int varr[4]; // объявление массива
- •3.2.2. Многомерные массивы.
- •Int z[3][4]; //массив из 12 целых чисел
- •3.2.3. Строки
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •If(strstr(st,st2)) //если подстрока встречается, выводим
- •3.1.5. Динамическое определение одномерных массивов.
- •3.1.6. Динамические двумерные массивы.
- •3.1.7. Указатели, массивы и арифметика указателей.
- •Int tacs[3];
- •Void main()
- •3.2. Структуры
- •Int age; // элементы структуры
- •Int hours;
- •Int mins;
- •Void main()
- •Int hours;
- •Int mins;
- •Void main()
- •4. Функции, определяемые пользователем
- •4.1. Объявление и определение функции
- •Int max(int , int ); // в прототипе достаточно указать только тип и
- •Void main() {
- •Int MyRand(){
- •Int func(){ return 1;} // правильное выражение
- •Int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с
- •Void swap(int p, int q)
- •Int bigger(int a,int b)
- •4.2. Передача параметров функций
- •5. Заголовочные файлы.
- •6. Работа с файлами
- •6.1 Простой файловый ввод/вывод
- •6.2 Тонкости работы с файлами
- •7.1. Определение классов.
- •Void main()
- •7.2. Как объявлять функции класса?
- •7.3. Конструкторы и деструкторы классов.
- •8. Графика OpenGl.
- •Void callback Draw()
- •Void main()
- •8.1. Создание анимации с помощью библиотеки xgl
- •Приложения Управление выводом
- •Управление шириной вывода
7.2. Как объявлять функции класса?
Определение методов во многом напоминает определение обычных функции. Небольшие функции-элементы можно определять внутри определения класса:
class Stock
{
private:
int shares;
double total_val;
double share_val;
…
void set()
{ total_val=shares*shares_val;} // определение метода Stock.set()
…
};
Более общий способ позволяет определять методы вне класса и даже в отдельном файле. Для этого используется оператор принадлежности (::) для идентификации класса. Заголовок метода в этом случае может выглядеть так:
void Stock::update(double price)
Рассмотрим “действующий” пример использования класса1 в программе, которая добавляет или снимает некоторые суммы с вклада:
#include <iostream.h>
#include <string.h> // для использования функции strncpy
#include <stdlib.h>
class Stock
{
private:
char company[30];
int shares;
double share_val;
double total_val;
void set_tot() // встроенная функция
{total_val=shares*share_val;}
public:
void acquare(const char * co,int n, double pr);
void buy(int num, double price);
void sell(int num, double price);
void update(double price);
void show();
}; // конец описания класса
// начала определения методов класса
void Stock::acquare(const char * co,int n, double pr)
{
strncpy(company,co,29); // стандартная функция strncpy "усекает"
// при необходимости строку до 29 символов.
company[29]='\0'; // конец строки
shares=n;
share_val=pr;
set_tot(); // можно использовать встроенные функции класса.
}
void Stock::buy(int num,double price)
{
shares+=num;
share_val=num;
set_tot();
}
void Stock::sell(int num,double price)
{
if (num>shares)
{
cerr<<"You can't sell more than you have! \n";
exit(1);
}
shares-=num;
share_val=price;
set_tot();
}
void Stock::update(double price)
{
share_val=price;
set_tot();
}
void Stock::show()
{
cout<<"Company:"<<company
<<"Shares: "<<shares<<'\n'
<<"Share Prce: $"<<share_val
<<"Total Worth:$"<<total_val<<'\n';
}
int main()
{
Stock stock1; // определение объекта stock1 класса Stock
stock1.acquare("NanoSmart",20,12.50);
stock1.show();
stock1.buy(15,18.25);
stock1.show();
return 0;
}
Обратите внимание, что в приведенном листинге текст main() по размеру намного меньше собственно описания класса. И хотя главная программа здесь используется всего лишь как платформа для тестирования конструкции класса Stock, такое соотношение объемов в объектно-ориентированном программировании вполне обычно.
Несколько замечаний к программе. Чтобы создать элемент класса (объект) используется имя класса, как если бы это было имя типа:
Stock stock1;
Метод класса может быть вызван только объектом класса, при этом используется точка:
stock1.buy(15,18.25);
7.3. Конструкторы и деструкторы классов.
Одна из целей С++ ‑ сделать использование объектов класса таким же простым, как и использование стандартных типов. Для этого следует “научить” класс инициализировать объект данными. Для этого служит функция-конструктор. В приведенном выше примере описание конструктора может выглядеть так:
Stock (const char * co, int n=0, double pr=0.0); // прототип функции
Тем не менее, инициализировать объект Stock тем же способом, что и структуру не удастся.