У меня есть полиморфных классов, производных от базового класса A:Ожидаемая эквивалентность: TypeId выражения данных и выражения типа
class A {
public:
virtual void fV() { }
};
class B : public A {
public:
void mB() { }
};
class C : public A {
public:
void mC() { }
};
Я хочу сейчас, чтобы перебрать массив, указывающий на такие объекты и проверить тип эквивалентности:
A *array[4] = { new B, new C, new C, new B };
for(int i = 0; i < 4; ++i) {
cout << i + 1 << ". " ;
(typeid(array[i]) == typeid(A)) ? cout << 1 << ' ': cout << 0 << ' ';
(typeid(*array[i]) == typeid(B)) ? cout << 1 << ' ': cout << 0 << ' ';
(typeid(*array[i]) == typeid(C)) ? cout << 1 << ' ': cout << 0 << ' ';
cout << endl;
}
результат:
1. 0 1 0
2. 0 0 1
3. 0 0 1
4. 0 1 0
Я ожидаю типа эквивалентности в первом условие, но в результате я получаю неудачное сравнение (0 0 0 0 в первом столбце). Результаты второго и третьего условий, как я и ожидал.
Что не так с первым условием?
Спасибо, Кристоф! Это мило. – Isi