План:
Низове
Конструиране на обекти
Използване на обекти
Обекти от реалния свят
Оператор if
** Низове
* Низ (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.
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
* Поне един от аргументите на сливането трябва да е променлива!
// 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;
}
** Конструиране на обекти.
Обектът е стойност, която може да се създава, запазва и обработва
със средствата на езика за програмиране.
Обект = променлива или константа, като понятието обект се използва
за "по-големи" променливи или константи.
Пример:
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;
// time1.cppЧлен-функции на класа Time:
#include <iostream> using namespace std;
#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;
}
Име | Действие |
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. |
Пример: Колко секунди остават до
края на деня?
#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; }
Тъй като денонощието съдържа 24x3600 = 86400
секунди, член-функцията seconds_from
връща стойност от тип long.
// employee.cppСъздава се обект harry с начална заплата 45000 и след това му се повишава заплатата с още 3000.
#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; }
Име | Действие |
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;
}