Используя метод абстрактного класса

действительно ли возможно использовать метод абстрактного класса? как я могу использовать метод класса, не имея экземпляра?

5
задан svick 14 January 2012 в 21:59
поделиться

2 ответа

Если вы объявляете метод как static , вы можете вызывать его напрямую, не требуя экземпляра класса. В противном случае вам понадобится экземпляр производного класса.

Поскольку абстрактный класс не может быть создан напрямую, вы не можете вызвать метод абстрактного класса напрямую , если это не статический метод. Но вы можете вызвать статический метод абстрактного класса напрямую, вот краткий пример:

#include <iostream>
#include <ostream>
#include <fstream>
using namespace std;

class stest{
  public:
   static void test();
   virtual void a() = 0;
  };

void stest::test(){ cout << "test\n"; }

int main(){
  stest::test();
  return 0;
}

В качестве альтернативы, если у вас есть экземпляр класса, производный от абстрактного класса, вы можете рассматривать его как экземпляр абстрактного class, и может вызывать для него любые методы.

6
ответ дан 13 December 2019 в 19:24
поделиться

Абстрактный класс не означает, что у вас нет экземпляра, это означает, что тип среды выполнения экземпляра фактически некоторый производный класс, который предоставляет реализации для чистых виртуальных функций в абстрактном базовом классе. Но не все функции-члены абстрактного класса должны быть чисто виртуальными, у вас может быть сочетание конкретных и абстрактных функций.

Когда вы вызываете функции-члены «абстрактного класса», все виртуальные функции, включая чисто виртуальные, вызываются полиморфно. Таким образом выполняется переопределение, определенное в производном классе. Невиртуальные функции вызывают определение в базовом классе, у вас не может быть чистых конкретных функций, поэтому даже абстрактный класс должен обеспечивать реализацию не виртуальных функций.

Реализация чистой виртуальной функции может быть предоставлена ​​абстрактным базовым классом. По-прежнему необходимо предоставить переопределение, но тогда переопределение может вызвать реализацию базового класса.

5
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: