Показаны сообщения с ярлыком конструктор. Показать все сообщения
Показаны сообщения с ярлыком конструктор. Показать все сообщения

пятница, 11 марта 2011 г.

46. Какой вид конструктора фактически является конструктором преобразования типов?

Конструктор с одним параметром. Для чего это нужно? Допустим у класса A есть конструктор принимающий единственный параметр - объект класса B. И есть некоторая функция принимающая объект класса A.
class A{
public:
  A(B);
};

void f(A);
Если у нас есть экземпляр класса B, то мы можем воспользоваться конструктором A(B), создать объект A, и передать в функцию:
B b;
A a(b);
f(a);
Или, если a не нужен для других целей (будет создан временный объект класса A):
B b;
f(A(b));

Но можно еще проще:
B b;
f(b);
Это эквивалентно примеру выше. Компилятор рассуждает так: "Я не могу передать b в f(A), это разные типы, но может быть есть способ преобразовать b к A? Да, можно воспользоваться конструктором A, передав b. Тогда будет создан объект класса A, его и передам в функцию".

Это приведение бывает полезным. Например (Страуструп 11.3.5), для операций с комплексными числами. Вместо такой стопки функций:
complex operator+(complex, complex);
complex operator+(complex, double);
complex operator+(double, complex);
можно оставить всего одну (первую), если в Complex создать конструктор Complex(double)

суббота, 8 января 2011 г.

37. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.

Ответ вкратце, благо информация по этому вопросу есть в любой книге.
a, b. Особый метод предназначенный для инициализации объектов класса.
c. Конструктор не возвращает значение, не наследуется