main() може мати вигляд void main () тоді їй непотрібно повертати ніяких значень і тому return в кінці програми непотрібний.
cout << - забезпечує виведення на екран монітору повідомлення (того, що в лапках).
return 0 - слугує для виходу з функції main(). Числовий параметр
після функції є значенням (результатом) функції (тобто кількість повторень виконань програми).
Для роботи з даними слід зарезервувати певний обсяг оперативної пам'яті комп'ютера, для зберігання їх даних. Тому всі дані, що використовуються в програмі, потрібно заздалегідь описати, оскільки компілятор програми розподіляє пам'ять згідно з описами.
Сталі const
В багатьох прикладах ми вже використали ключове слово const для позначення того, що та або інша величина не змінюється. В даному параграфі приводяться докладні правила вживання описувача const.
Якщо на початку опису змінної стоїть описувач const, то описуваний об'єкт під час виконання програми не змінюється:
const double pi = 3.1415;
const Complex one(1,1);
Якщо const стоїть перед визначенням покажчика або посилання, то це означає, що не змінюється об'єкт, на який даний покажчик або посилання указує:
// покажчик на незмінний рядок
const char* ptr = &string;
char х = *ptr;
ptr++;
*ptr = '0';
// звертання по покажчику - допустиме
// зміна покажчика - допустима
// спроба зміни об'єкту, на
// який покажчик указує -
// помилка
Якщо потрібно оголосити покажчик, значення якого не змінюється, то таке оголошення виглядає таким чином:
char* const ptr = &string;
// незмінний покажчик
char х = *ptr;
ptr++;
*ptr = '0';
// звертання по покажчику - допустиме
// зміна покажчика - помилка
// зміна об'єкту, на який
// покажчик указує - допустиме
Доступ до об'єкту по читанню і запису
Окрім контролю доступу до атрибутів класу за допомогою розділення класу на внутрішню, захищена і зовнішня частина, потрібно стежити , за допомогою яких методів можна змінити поточне значення об'єкту, а за допомогою яких - не можна.
При описі методу класу як const виконання методу не може змінювати значення об'єкту, який цей метод виконує.
class
{
public:
int GetValue (void) const;
int AddValue (int х) const;
private:
int value;
}
int
::GetValue(void) const
return value; }
// об'єкт не змінюється
int
::AddValue(int х) const
{
value += х;
// спроба змінити атрибут об'єкту
// приводить до помилки компіляції
return value;
}
Таким чином, використовування описувача const дозволяє програмісту контролювати можливість зміни інформації в програмі, тим самим попереджаючи помилки.
В описі класу String один з методів - GetLength - уявлений як незмінний (в кінці опису методу стоїть слово const). Це означає, що виклик даного методу не змінює поточне значення об'єкту. Інші методи змінюють його значення. Контроль використовування тих або інших методів ведеться на стадії компіляції. Наприклад, якщо аргументом якої-небудь функції оголошено посилання на незмінний об'єкт, то, відповідно, ця функція може викликати тільки методи, оголошені як const:
int
Lexer::CharCounter(const String& s, char з)
{ int n = s.GetLength(); // допустимо
s.Concat("ab");
// помилка - Concat змінює значення s
}
Загальним правилом є оголошення всіх методів як незмінних, за винятком тих, які дійсно змінюють значення об'єкту. Іншими словами, оголошуйте якомога більше методів як const. Таке правило відповідає правилу оголошення аргументів як const. Оголошення константних аргументів забороняє зміну об'єктів під час виконання функції і тим самим запобігає випадковим помилкам.
Тип даних
С++ надає вбудовану підтримку для основних
// оголошення цілого об'єкту ival
// ival ініціалізувався значенням 1024
int ival = 1024;
// оголошення речовинного об'єкту подвійної точності dval
// dval ініціалізувався значенням 3.14159
double dval = 3.14159;
// оголошення речовинного об'єкту одинарної точності fval
// fval ініціалізувався значенням 3.14159
типів даних - цілих і речовинних чисел, логічних значень і символів:
float fval = 3.14159;
До числових типів даних можуть застосовуватися вбудовані арифметичні і логічні
int ival2 = ival1 + 4096; // урівнювання
операції: об'єкти числового типу можна урівнювати, віднімати, умножати, ділити і т.д.
int ival3 = ival2 - ival; // віднімання
dval = fval * ival; // множення
ival = ival3 / 2; // розподіл
bool result = ival2 == ival3; // порівняння на рівність
result = ival2 + ival != ival3; // порівняння на нерівність
result = fval + ival2 < dval; // порівняння на менше
result = ival > ival2; // порівняння на більше
Операція присвоєння
Присвоєння - це теж операція, вона є частиною виразу. Значення правого операнда привласнюється лівому операнду.
х = 2; // змінною х присвоїти значення 2
cond = х < 2; // змінною cond присвоїти значення true, якщо х менше 2
// інакше присвоїти значення false помилка
3 = 5; // число 3 нездібно змінювати своє значення
Останній приклад ілюструє вимогу до лівого операнда операції присвоєння. Він повинен бути здатний зберігати і змінювати своє значення. Змінні, оголошені в програмі, володіють подібною властивістю. В наступному фрагменті програми:
int х = 0;
х = 3;
х = 4;
х = х + 1;
спочатку оголошується змінна х з початковим значенням 0. Після цього значення х змінюється на 3, 4 і потім 5. Знову-таки, звернемо увагу на останню строку. При обчисленні операції присвоєння спочатку обчислюється лівий операнд, а потім правий. Коли обчислюється вираз х + 1, значення змінної х рівне 4. Тому значення виразу х + 1 рівне 5. Після обчислення операції присвоєння (або, простіше кажучи, після присвоєння) значення змінни х стає рівним 5.
В операції присвоєння теж є результат. Він рівний значенню лівого операнда. Таким чином, операція
привласнення може брати участь в складнішому виразі:
z = (х = в + 3);
В наведеному прикладі змінним х і z присвоюється значення у + 3.
Дуже часто в програмі доводиться значення змінної збільшувати або зменшувати на одиницю. Для того щоб зробити ці