|
Программирование >> Инициализация объектов класса, структура
... Начальное значение может быть задано прямо в операторе определения переменной. В С++ допустимы две формы инициализации переменной - явная, с использованием 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 В чем разница между следующими глобальными и локальными определениями
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |