так что мой вопрос в том, почему это не разрешено, в этом случае бросить B *** в ***? Когда я вручную отбрасываю arr (A **), этот код работает нормально.
static const int N = 2;
class A {
public:
virtual ~A() {
}
virtual void bla() {
cout << 'A' << endl;
}
};
class B: public A {
public:
~B() {
}
void bla() {
cout << 'B' << endl;
}
};
void callBla(A** arr) {
for (int i = 0; i < N; i++) {
arr[i]->bla();
}
}
int main() {
B** arr = new B*[N];
for (int i = 0; i < N; i++) {
arr[i] = new B[N];
}
callBla(arr);
return 0;
}
Я ничего не мог найти об этом случае, спасибо за ваши ответы заранее!
Это не типично; вы могли бы сделать
void callBla(A** arr) {
for (int i = 0; i < N; i++) {
arr[i] = new A;
}
}
и тогда ваш массив B*
больше не будет массивом B*
.
или даже
void callBla(A** arr) {
for (int i = 0; i < N; i++) {
*arr[i] = A();
}
}
и тогда ни один из ваших B
не будет B
больше.