Конструктор приведения типов
От: Аноним  
Дата: 06.11.07 15:43
Оценка:
Здравствуйте, подскажите пожалуйсто, что такое конструктор приведения типов, а также понижаюшие и повышаюшее приведение типов
Re: Конструктор приведения типов
От: Yuriy83 Украина  
Дата: 06.11.07 16:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, подскажите пожалуйсто, что такое конструктор приведения типов, а также понижаюшие и повышаюшее приведение типов


Конструктор приведения (преобразования) типов — конструктор, который в качестве аргумента принимает объект другого типа и поэтому может использоваться для приведения типов (в том числе и неявно).

понижаюшие и повышаюшее приведение типов (downcasting, upcasting) — это соответственно приведение базового класса к наследнику, и наоборот.
Re: Конструктор приведения типов
От: VoidEx  
Дата: 06.11.07 16:47
Оценка: 27 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, подскажите пожалуйсто, что такое конструктор приведения типов, а также понижаюшие и повышаюшее приведение типов


class My
{
public:
  My(int i); // конструктор приведения типов
  My(double d, int x = 4); // ...
  explicit My(float * pf)
};

class MyDerived {};

int foo1(My m) { ... }
void foo2(int i)
{
  foo1(i); // foo1(My(i)) - неявное приведение типа
  foo1(0.0); // foo1(My(0.0, 4)) - ...
}
void foo3(float & f)
{
  // foo1(&f); // ошибка!
  foo1(My(&f)); // Тут надо явно, т.к. explicit
}
void foo4(MyDerived * d) { ... }
void foo5(MyDerived & d) { ... }
void foo6(My * m)
{
  foo4(dynamic_cast<MyDerived *>(m));
  // вернет 0, если m не является объектом типа MyDerived
  foo4(dynamyc_cast<MyDerived &>(m));
  // кинет исключение, если не...
  foo4(static<MyDerived *>(m));
  // сам дурак, если не...
}
void foo7(MyDervied * md)
{
  foo6(md);
}

Первое как раз конструкторы приведения типов.
My -> MyDerived — понижающее
MyDerived -> My — восходящее
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.