Здравствуйте, подскажите пожалуйсто, что такое конструктор приведения типов, а также понижаюшие и повышаюшее приведение типов
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, подскажите пожалуйсто, что такое конструктор приведения типов, а также понижаюшие и повышаюшее приведение типов
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 — восходящее