Программирование >>  Инициализация объектов класса, структура 

1 ... 25 26 27 [ 28 ] 29 30 31 ... 395


...

Начальное значение может быть задано прямо в операторе определения переменной. В С++ допустимы две формы инициализации переменной - явная, с использованием

int ival = 1024;

оператора присваивания:

string project = Fantasia 2000 ;

int ival( 1024 );

и неявная, с заданием начального значения в скобках:

string project( Fantasia 2000 );

Оба варианта эквивалентны и задают начальные значения для целой переменной ival как 1024 и для строки project как Fantasia 2000 .

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 );



#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;

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

i (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

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

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

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



string global class; int global int;

переменных?

int main() {

int local int; string local class;

...

3.3. Указатели

Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2. Указатель - это объект, содержащий адрес другого объекта и позволяющий косвенно манипулировать этим объектом. Обычно указатели используются для работы с динамически созданными объектами, для построения связанных структур данных, таких, как связанные списки и иерархические деревья, и для передачи в функции больших объектов - массивов и объектов классов - в качестве параметров.

Каждый указатель ассоциируется с некоторым типом данных, причем их внутреннее представление не зависит от внутреннего типа: и размер памяти, занимаемый объектом тина указатель, и диапазон значений у них одинаков5. Разница состоит в том, как компилятор воспринимает адресуемый объект. Указатели на разные типы могут иметь одно и то же значение, но область памяти, где размещаются соответствующие типы, может быть различной:

указатель на int, содержащий значение адреса 1000, направлен на область памяти 1000-1003 (в 32-битной системе);

указатель на double, содержащий значение адреса 1000, направлен на область памяти 1000-1007 (в 32-битной системе).

int *ip1, *ip2;

complex<double> *cp;

string *pstring;

vector<int> *pvec;

Вот несколько примеров:

5 На самом деле для указателей на функции это не совсем так: они отличаются от указателей на данные (см. раздел 7.9).

(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

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



1 ... 25 26 27 [ 28 ] 29 30 31 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика