@Fango

Почему программа не скомпилируется?

#include <iostream>
using namespace std;

class A {
public:
  virtual void func(char a, char b) = 0;
};
class B : public A {
public:
  void func(char a, char b) {
    cout << a << b;
  }
  virtual void func1(char a, char b) = 0;
};
class D : public B {
public:
  void func(char a, char b) {
    cout << a;
  }
  void func1(char a, char b) {
    cout << b << a;
  }
  void func2(char a, char b) {
    cout << b;
  }
};
int main() {
  A a; B b; D d;
  char i = 'o', j = 'k';
  d.func1(i, j);
}
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
Чисто виртуальный класс это класс, у которого есть хотя бы один чисто виртуальный метод(= 0; синтаксис дибильный, конечно). Этот метод не имеет тела, и его поэтому нельзя вызвать.
Поэтому чисто виртуальный класс нельзя инстанцировать, то есть создать экземпляр этого класса.А а; непосредственно вызывает конструктор без параметров, в этом месте создаётся инстанс класса(синтаксис не менее дибильный). Возникает противоречие. И поэтому программа не компилируется.
Поэтому переменные не могут иметь тип чисто виртуальных классов. Но могут быть ссылки А& и указатели А*. Ссылка и указатель будут ссылаться (указывать) на инстанс потомка, которого можно создать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@User700
Потому что как минимум A это чисто виртуальный класс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы