Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 22:12   #1
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
Вопрос Параметр классу? Непонятный с++.

Вот такой вот момент.
Код:
n - тип char
cout << int(n)
Это как понимать? Классу присваивается значение, а потом этот класс выводится на экран? :WALL:
Что конкретно эта вещь делает?

Почему:
int *a = new int(9); // работает
cout << *a<<endl; // работает
int *b = new int("9"); // Бац!! не работает
cout << int("8")<<endl; // А вот так на удивление работает!!???

Местные гуру, распишите в деталях что происходит при этих действиях?
int *a = new int(9);
cout << int(9);

Это классу значение присваивается? Но вроде в скобках инициализировать можно только объект класса.

Последний раз редактировалось jojahti; 15.10.2009 в 22:14.
jojahti вне форума Ответить с цитированием
Старый 15.10.2009, 22:23   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

int - базовый тип.
Код:
int* a = new int(9); // Выделить память под int и инициализировать её девяткой
cout << int("9"); // Привести указатель на строку, содержащую символ '9' к типу intю
Вообще нечто вроде
Код:
char n = 9;
int b = int(n);
Называется приведение типа в функциональном стиле и эквивалентно:
Код:
char n = 9;
int b = (int)n;
но в контексте new значение в скобках воспринимается как инициализатор
netrino вне форума Ответить с цитированием
Старый 15.10.2009, 22:34   #3
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Нда уж, синтаксис многовариантный.

Гмммм.
То есть к примеру int(12) ни в коем разе ничего не возвращает?
А вышеприведённые записи это каг бэ сокращённая форма?
jojahti вне форума Ответить с цитированием
Старый 15.10.2009, 22:41   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от jojahti Посмотреть сообщение
Нда уж, синтаксис многовариантный.

Гмммм.
То есть к примеру int(12) ни в коем разе ничего не возвращает?
А вышеприведённые записи это каг бэ сокращённая форма?
Не такой уж и многовариантный
Код:
#include <iostream>

int main()
{
	int l(8);
	int* s = new int(10);

	int c = int('A');
// int c = (int)'A';

	std::cout << "l = " << l << std::endl;
	std::cout << "c = " << c << std::endl;
	std::cout << "s = " << *s << std::endl;

	return 0;
}
Вот пример. Первое - инициализация l восьмёркой. Второе - выделение памяти под переменную типа int и инициализация её десяткой. Третье - приведение в функциональном стиле. А приведение базовых типов зачастую необходимо лишь для уведомления компилятора и никакого машинного кода при этом не генерируется(исключения - тип bool и числа с плавающей точкой)

...

То есть в первых двух вариантах это как вызов конструктора, а в третьем обычное приведение из разряда _cast

Последний раз редактировалось netrino; 15.10.2009 в 22:47.
netrino вне форума Ответить с цитированием
Старый 16.10.2009, 08:55   #5
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Цитата:
То есть в первых двух вариантах это как вызов конструктора, а в третьем обычное приведение из разряда _cast
Во!! Всё, теперь я спокоен. Похоже всё выглядит, и я думал там везде операция одного характера. )
jojahti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный синтаксис. jojahti Общие вопросы C/C++ 10 14.10.2009 19:05
Известны оценки по физике каждого из 20 учеников класса. Определить среднюю оценку по классу sinid Паскаль, Turbo Pascal, PascalABC.NET 6 23.01.2009 17:30
непонятный компилятор Waleriy Общие вопросы по Java, Java SE, Kotlin 2 11.12.2008 14:16
Как через свич раздать по классу Инет soktahan Свободное общение 4 16.11.2008 10:54
Обратиться к классу (Delphi) Air Помощь студентам 16 17.07.2008 19:51