План:
Низове
Конструиране на обекти
Използване на обекти
Обекти от реалния свят
Оператор 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).
Параметри (аргументи) на функцията са cin и name.
* Член-функция е функция, свързана с определен тип данни. Тя се
извиква с операция точка (.).
Пример:
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. |