С++ для начинающих




Определение объекта - часть 2


Явную инициализацию можно применять и при определении переменных списком:

double salary = 9999.99, wage = salary + 0.01;

int month = 08;

      day = 07, year = 1955;

Переменная становится видимой (и допустимой в программе) сразу после ее определения, поэтому мы могли проинициализировать переменную wage суммой только что определенной переменной salary с некоторой константой. Таким образом, определение:

// корректно, но бессмысленно

int bizarre = bizarre;

является синтаксически допустимым, хотя и бессмысленным.

Встроенные типы данных имеют специальный синтаксис для задания нулевого значения:

// ival получает значение 0, а dval - 0.0

int ival = int();

double dval = double();

В следующем определении:

// int() применяется к каждому из 10 элементов

vector< int > ivec( 10 );

к каждому из десяти элементов вектора применяется инициализация с помощью int(). (Мы уже говорили о классе vector в разделе 2.8. Более подробно об этом см. в разделе 3.10 и главе 6.)

Переменная может быть инициализирована выражением любой сложности, включая вызовы функций. Например:

#include <cmath>

#include <string>

double price = 109.99, discount = 0.16;

double sale_price( price * discount );

string pet( "wrinkles" );

extern int get_value();

int val =  get_value();

unsigned abs_val = abs( val );

abs() – стандартная функция, возвращающая абсолютное значение параметра. get_value() – некоторая пользовательская функция, возвращающая целое значение.

Упражнение 3.3

Какие из приведенных ниже определений переменных содержат синтаксические ошибки?

(a) int car = 1024, auto = 2048;

(b) int ival = ival;

(c) int ival( int() );

(d) double salary = wage = 9999.99;

(e) cin >> int input_value;

Упражнение 3.4

Объясните разницу между l-значением и r-значением. Приведите примеры.

Упражнение 3.5

Найдите отличия в использовании переменных name и student в первой и второй строчках каждого примера:

(a) extern string name;

    string name( "exercise 3.5a" );

(b) extern vector<string> students;

    vector<string> students;

Упражнение 3.6

Какие имена объектов недопустимы в С++? Измените их так, чтобы они стали синтаксически правильными:

(a) int double = 3.14159; (b) vector< int > _;

(c) string namespase;     (d) string catch-22;

(e) char 1_or_2 = '1';    (f) float Float = 3.14f;

Упражнение 3.7

В чем разница между следующими глобальными и локальными определениями переменных?

string global_class;

int global_int;

int main() {

    int local_int;

    string local_class;

    // ...

}




Содержание  Назад  Вперед