почему наш класс C ++ принудительно абстрактный? - PullRequest
2 голосов
/ 12 января 2011

Почему, когда мы наследуем абстрактный класс C #, определенный в .dll, наш класс C ++ - CLI принудительно является абстрактным?
есть ли способ сделать его не абстрагирующим наш класс c ++ - CLI?

Ответы [ 3 ]

3 голосов
/ 12 января 2011

Я не уверен, что правильно понял ваш вопрос, но вы должны реализовать все методы, объявленные, но не реализованные в абстрактном базовом классе, в противном случае, естественно, ваш класс также считается абстрактным.

2 голосов
/ 12 января 2011
class A
{
public:
    virtual void fun() = 0; //"pure" virtual function
    virtual void gun() = 0; //"pure" virtual function

    virtual void sun() //virtual function - "not pure"
    {
      /***** implementation code *****/
    }
};

Здесь A - абстрактный класс, поскольку он имеет две чисто виртуальные функции.

class B : public A
{
public:
    virtual void fun() 
    {
       /******* implementation code ********/
    }
};

Вопрос: Что такое B?Это не абстрактно?В конце концов, он определил / реализовал одну виртуальную функцию pure с именем fun()?

Ответ: Нет. B тоже является абстрактным классом, потому что онне определил / не реализовал gun(), что тоже является pure виртуальной функцией в базовом классе A.Определение только одной виртуальной функции pure с именем fun() не делает ее неабстрактной.Он должен определять ВСЕ чистые виртуальные функции.ALL означает ВСЕ, столько, сколько существует pure виртуальных функций.

Итак, два важных замечания: 1) чисто виртуальные функции, 2) определяют их все. Только тогда класс может стать конкретным / неабстрактным!

2 голосов
/ 12 января 2011

Если ваш класс объявляет какие-либо методы, которые являются «чисто виртуальными» (то есть с «= 0»), или наследует любые чисто виртуальные методы, не переопределяя их, ваш класс будет абстрактным.

...