План:
      Низове
      Конструиране на обекти
      Използване на обекти
      Обекти от реалния свят
      Оператор if
    
Пример: Да се изведат инициалите на името и презимето,
      зададени на входа.
    
// initials.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{ cout << "Please enter your full name (first middle last): ";
string first;
string middle;
string last;
cin >> first >> middle >> last;
string initials = first.substr(0, 1) + middle.substr(0, 1)
+ last.substr(0, 1);
cout << "Your initials are " << initials << "\n";
return 0;
}
| Enter your full name (first middle last):
              Nikolay Kirov Kirov Your initials are NKK  | 
        
* Низ (string) е редица от символи - букви, цифри, специални
      символи.
       
| Низ е редица от символи | "Hello" | 
| Дефиниция на променлива от тип string | 
           string name = "John"; | 
        
| Заглавен файл | #include <string> | 
| Оператор за присвояване | name = "Carl"; | 
| Извеждане на низове | cout << name; | 
| Вход на низ | 
          cin >> name; | 
| Вход на цял ред | getline(cin, name); | 
| Дължина на низ | int n = name.length(); | 
| Празен низ | "" | 
| Автоматична инициализация | string response; | 
* Функция за вход - getline(cin,name)
        - подобна на аритметичната функция pow(x,y). 
        Параметри (аргументи) на функция.
        
        * Член-функция е функция, свързана с определен тип данни. Тя се
        извиква с операция точка (.).
         Пример:
        name.length() - връща дължината на
        низа (цяло неотрицателно число!)
* За променливи от тип string е дефинирана и член-функция substr - подниз (substring)
Пример:
       string greeting = "Hello World!\n";
      string sub =
            greeting.substr(0, 4); 
      
      greeting.substr(0,4)- връща
подниз
      от позиция 0 до позиция 3 (4 символа). 
      Позициите в низа се броят от 0.
    
"Hello, World!"
    
| 
             H 
           | 
          
             e 
           | 
          
             l 
           | 
          
             l 
           | 
          
             o 
           | 
          
             , 
           | 
          
             | 
          
             W  
           | 
          
             o 
           | 
          
             r 
           | 
          
             l 
           | 
          
             d 
           | 
          
             ! 
           | 
          
             \n 
           | 
        
| 
             0 
           | 
          
             1 
           | 
          
             2 
           | 
          
             3 
           | 
          
             4 
           | 
          
             5 
           | 
          
             6 
           | 
          
             7 
           | 
          
             8 
           | 
          
             9 
           | 
          
             10 
           | 
          
             11 
           | 
          
             12 
           | 
          
             13 
           | 
        
greeting.substr(7,5)- връща
      подниз от позиция 7 до позиция 11 (5 символа). 
      
| 
             H 
           | 
          
             e 
           | 
          
             l 
           | 
          
             l 
           | 
          
             o 
           | 
          
             , 
           | 
          
             | 
          
             W  
           | 
          
             o 
           | 
          
             r 
           | 
          
             l 
           | 
          
             d 
           | 
          
             ! 
           | 
          
             \n 
           | 
        
| 
             0 
           | 
          
             1 
           | 
          
             2 
           | 
          
             3 
           | 
          
             4 
           | 
          
             5 
           | 
          
             6 
           | 
          
             7 
           | 
          
             8 
           | 
          
             9 
           | 
          
             10 
           | 
          
             11 
           | 
          
             12 
           | 
          
             13 
           | 
        
* Сливане на низове
      (конкатенация). 
        Предефиниране на операция + (събиране)
       string fname = "Nikolay"; 
      string lname = "Kirov"; 
      string name = fname + lname; 
      "NikolayKirov"
string name = fname + " " + lname; 
      "Nikolay Kirov"
          
      * Поне един от аргументите на сливането трябва да е променлива!
string name = "Nikolay" + "Kirov"; // ERROR!
 ** Конструиране на обекти
        
       Обектът е стойност, която може да се създава, запазва и
      обработва със средствата на езика за програмиране. 
      Обект = променлива или константа, като понятието обект се използва
      за "по-големи" променливи или константи (напр. низове). 
      Пример:
       int k =
            1;              
/*
          k е обект, по-добре променлива */ 
       string greeting = "Hello"; /* greeting и "Hello" са обекти */ 
      
      * Тип данни клас. 
    
 Класовете могат да се дефинират от програмиста. 
      Класът Time е дефиниран от К. Хорстман и задава
      нов тип данни. 
      Обект от този клас съхранява момент от времето - час, минути,
      секунди (три цели числа).
      Конструиране на обект: Time(23,59,59) означава 23
      часа, 59 минути и 59 секунди. 
      Това е обект-константа, аналогичен на числовите константи
      (числата) и низовете.
 Пример:
         6 е константа от тип int;
         2.3,  е константа от тип double;
         "Hello" е константа от тип string;
        Time(23,59,59) е константа (обект-константа) от
      тип Time.
 Включване на файл с дефиниция на класа: 
          #include
            "ccc_time.h"
           
      Дефиниране на обект-променлива от тип Time: 
              Time day_end = Time(23,59,59);
      
      или по-кратко (съкратен запис): 
          Time
            day_end(23,59,59);
           
      Често вместо "обект-променлива" ще използваме само "променлива"
      или само "обект". 
      Името на променливата е day_end, типът на
      променливата е Time и началната стойност на
      променливата е Time(23,59,59). 
      
      * Конструктор и параметри на конструктора. 
    
 За създаване на обекти от клас се използва функция, наречена
      конструктор на класа: 
      -- името на конструктора съвпада с името на класа; 
      -- параметрите на конструктора са зададени в дефиницията на класа.
      
    
 Конструиране по подразбиране - задава текущото време по
      компютърния часовник (в момента на изпълнение на програмата): 
             Time
now
            = Time(); 
      или съкратено: 
         Time now;
      
    
#include "ccc_time.h"
 
int main()
{  Time wake_up(8, 0, 0);
   wake_up.add_seconds(1000); /*  a thousand seconds later */
   cout << wake_up.get_hours() << ":" << wake_up.get_minutes()
        << ":" << wake_up.get_seconds() << "\n";
   return 0; 
} 
    | nkirov@CITB107 % c++ time1.cpp
              ccc_time.cpp nkirov@CITB107 % ./a.out 9:16:40  | 
        
| Име | Действие | |
| Time() | Конструира обект, показващ текущото време | Конструктор | 
        
| Time(h,m,s) | Конструира обект, показващ h часа, m минути и s секунди | Конструктор | 
| t.get_seconds() | Връща броя на секундите в t. | Член-функция за достъп | 
        
| t.get_minutes() | Връща броя на минутите в t. | Член-функция за достъп | 
| t.get_hours() | Връща броя на часовете в t. | Член-функция за достъп | 
| t.add_seconds(n) | Премества момента t с n секунди напред. | Член-функция за промяна | 
        
| t.seconds_from(t2) | Пресмята броя на секундите между t и t2. | Член-функция за достъп | 
Пример: Колко секунди остават до
        края на деня? 
    
// time2.cpp
#include <iostream> using namespace std; #include "ccc_time.h" int main() { Time now; Time day_end(23, 59, 59); long seconds_left = day_end.seconds_from(now); cout << "There are " << seconds_left
<< " seconds left in this day.\n"; return 0; }
| nkirov@CITB107 % c++ time2.cpp
                ccc_time.cpp nkirov@CITB107 % ./a.out There are 10660 seconds left in this day.  | 
        
Тъй като денонощието съдържа 24x3600 = 86400
      секунди, член-функцията seconds_from
          връща стойност от тип long. 
    
// employee.cpp
#include <iostream> using namespace std; #include "ccc_empl.h"
int main() { Employee harry("Hacker, Harry", 45000.00); double new_salary = harry.get_salary() + 3000; harry.set_salary(new_salary); cout << "Name: " << harry.get_name() << "\n"; cout << "Salary: " << harry.get_salary() << "\n"; return 0; }
| nkirov@CITB107 % c++ employee.cpp
                ccc_empl.cpp nkirov@CITB107 % ./a.out Name: Hacker, Harry Salary: 48000  | 
        
| Име | Действие | |
| Employee(n,s) | Конструира обект, представящ служител с име n и заплата s. | Конструктор | 
| e.get_name() | Връща името на e. | Член-функция за достъп | 
| e.get_salary() | Връща заплатата на e. | Член-функция за достъп | 
| e.set_salary(s) | Дава нова стойност s на заплатата на e. | Член-функция за промяна | 
** Оператор if (условен оператор)
        
       Операторът if се състои от 2 части - условие и
      тяло. if е съставен оператор.
      Пример:
    
if (area < 0) // условие
cout << "Error: Negative area.\n"; // тяло
[блок-схема]
    
Когато условието е вярно, се изпълнява тялото на оператора. 
      Ако условието е нарушено (не е вярно), се изпълнява следващия
      оператор (след оператора if). 
      Тялото на if може да бъде друг оператор или блок.
      Блок е група от оператори, оградени с къдрави (големи) скоби {}.
 Пример:
    
if (area < 0)
{
cout << "Error: Negative area.\n";
return 1;
}
Блокът замества (се разглежда като) един оператор.
 Пример: Страна на квадрат.
    
// area1.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (area < 0)
{ cout << "Error: Negative area.\n";
return 1;
}
/* now we know that area is >= 0 */
double length = sqrt(area);
cout << "The side length of the square is "
<< length << "\n";
return 0;
}
| nkirov@CITB107 % c++ -o area area1.cpp nkirov@CITB107 % ./area Please enter the area of a square: 25 The side length of the square is 5 nkirov@CITB107 % ./area Please enter the area of a square: -100 Error: Negative area.  |