class A
{
public:
virtualstring GetMyName() const
{
return(typename(this));
}
};
class B1 : public A {};
class B2 : public A {};
class B3 : public A {};
voidOnStart()
{
B1 b1;
B2 b2;
B3 b3;
Print(b1.GetMyName()); // class A const, надо class B1 constPrint(b2.GetMyName()); // class A const, надо class B2 constPrint(b3.GetMyName()); // class A const, надо class B3 const
}
Возможно ли без копи-пасты виртуального метода в каждый класс получить нужный результат (см. комментарий в исходнике).
class A {};
class B1 : public A {};
class B2 : public A {};
class B3 : public A {};
voidOnStart()
{
A* a[3];
a[0] = new B1;
a[1] = new B2;
a[2] = new B3;
for (int i = 0; i < 3; i++)
a[i] = new// ???? - как в цикле задать?
}
Нужно задать элементы массива в цикле (см. комментарий в исходнике).
class A {};
class B : public A {};
template <typename T>
T* New( T )
{
return(new T);
}
voidOnStart()
{
B b;
A* a = &b; // B-объект в A*.
A* a2 = New(&b); // Здесь делается new B.
A* a3 = New(a); // Здесь делается new A, а надо new B.
}
Нужно суметь создать такой же объект, на какой ссылается базовый указатель.
Все три вопроса возникли по мере решения такой задачи.
inputstring inStr = "B2";
class A {};
class B1 : public A {};
class B2 : public A {};
// .....class B100 : public A {};
voidOnStart()
{
A* a = New(inStr); // создает объект, который прописан в inStr.
}
Нужно написать один раз New и больше не править. При этом можно добавлять B101, B102, ....
ЗЫ Похоже, вопросы не совсем начального уровня. Я не смог решить ни один.
fxsaber #: Все три вопроса возникли по мере решения такой задачи.
Нужно написать один раз New и больше не править. При этом можно добавлять B101, B102, ....
Вариант, где нужно делать наименьшее количество правок.
inputstring inStr = "B2";
class A {};
class B1 : public A {};
class B2 : public A {};
class B3 : public A {};
template <typename T>
T* New( string Str )
{
T* Res = NULL;
#define NEW(B) if ((Res == NULL) && (#B == Str)) Res = new B;
NEW(B1)
NEW(B2)
NEW(B3)
#undef NEW
return(Res);
}
voidOnStart()
{
A* a = New<A>(inStr); // создает объект, который прописан в inStr.
}
fxsaber #: 1. Вопрос начального уровня. Возможно ли без копи-пасты виртуального метода в каждый класс получить нужный результат (см. комментарий в исходнике).
template<typename Type>
class A
{
public:
virtualstring GetMyName() const
{
return(typename(Type));
}
};
class B1 : public A<B1> {};
class B2 : public A<B2> {};
class B3 : public A<B3> {};
2. Вопрос начального уровня.
Нужно задать элементы массива в цикле (см. комментарий в исходнике).
3. Вопрос начального уровня.
Нужно суметь создать такой же объект, на какой ссылается базовый указатель.
Вопрос начального уровня.
Нужно написать один раз New и больше не править. При этом можно добавлять B101, B102, ....
ЗЫ Похоже, вопросы не совсем начального уровня. Я не смог решить ни один.
Все три вопроса возникли по мере решения такой задачи.
Нужно написать один раз New и больше не править. При этом можно добавлять B101, B102, ....
Вариант, где нужно делать наименьшее количество правок.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Создавайте сообщества и общайтесь с коллегами в обновленном Чате
Yauhen Zhuk, 2023.01.17 13:35
Привет. Подскажите почему не открываются изображения в группах/каналах в МТ5 на андроид. Пишет "Файл не найден"?Вариант, где нужно делать наименьшее количество правок.
Может, чуток оптимизировать?
Может, чуток оптимизировать?
Спасибо, так лучше.
1. Вопрос начального уровня. Возможно ли без копи-пасты виртуального метода в каждый класс получить нужный результат (см. комментарий в исходнике).
Только так.