Мне необходимо при приобразовании указателя на объект класса А в указатель на объект класса B выдавать exception,но компилятор не позволяет перегрузку
#include <iostream>
using namespace std;
class A
{
protected:
int a;
public:
A operator B*()(A *ax) //Тут выдает ошибку,говорит,что B не имя типа
{
throw("Bad Type Overload");
}
};
class B:public A
{
protected:
int B;
};
int main()
{
A *a;
B *b;
b=(B*)a;
return 0;
}
Начнем с того, что что такое B, в строке с оператором неизвестно.
Далее, оператор приведения не имеет возвращаемого типа (он уже указан в операторе!), и не получает никакого параметра - он уже получает this
...
Член int B;
в классе B
тоже не есть хорошо.
Приведение b=(B*)a
не будет даже пытаться использовать ваш оператор - потому что это приведение указателя к указателю (в скобках - ужасное: указателя на базовый класс к указателю на производный...)
Так что лучшее, что вы можете получить - примерно
class B;
class A
{
protected:
int a;
public:
operator B*()
{
throw("Bad Type Overload");
}
};
class B:public A
{
protected:
int b;
};
int main()
{
A *a;
(B*)*a;
return 0;
}
но это все - не очень здоровое занятие, и непонятно кому и зачем нужное...
Update
Вот, взгляните - исключение вы можете получить, но при приведении ссылок.
#include <iostream>
using namespace std;
class Base
{
public:
virtual ~Base() {}
};
class Derived: public Base
{
public:
virtual ~Derived() {}
};
int main()
{
Base * b = new Base;
Derived * d = dynamic_cast<Derived *>(b);
cout << d << endl;
try {
Base bb;
Derived & dd = dynamic_cast<Derived &>(bb);
} catch(exception&e)
{
cout << e.what() << endl;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Постараюсь описать детальноВ общем у меня на странице есть блок со скроллом Вот нарисовал схему:
Для упрощенной работы с временем я воспользовалсь библиотекой momentjs