为什么我们的C ++类被强制抽象?

时间:2011-01-12 19:46:47

标签: c# .net class c++-cli abstract-class

为什么当我们继承一个.dll中定义的抽象C#类时,我们的C ++-CLI类被强制抽象?
有没有办法让它不抽象我们的c ++ - CLI类?

3 个答案:

答案 0 :(得分:3)

我不确定我是否正确理解了你的问题,但你必须实现所有已声明但未在抽象基类中实现的方法,否则你的类自然会被认为是抽象的。

答案 1 :(得分:2)

如果你的类声明任何“纯虚拟”方法(即“= 0”),或者继承任何纯虚方法而不覆盖它们,那么你的类将是抽象的。

答案 2 :(得分:2)

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?这是非抽象的吗?毕竟,它定义/实现了一个名为fun()虚拟函数?

答案:号码B也是一个抽象类,因为它没有定义/实现gun(),它也是虚拟基类A中的函数。仅定义一个名为fun()虚拟函数并不会使其成为非抽象的。它必须定义所有虚拟函数。 ALL表示ALL,与虚函数一样多。

这里有两个重要的注释: 1)纯虚函数,2)定义所有这些。只有这样一个类才能成为具体/非抽象的!