如何在C ++中创建抽象基类?

时间:2012-05-01 15:11:26

标签: c# c++ polymorphism virtual abstract

我将如何在C ++中执行以下操作(以下代码为C#):

class Base
{
    public virtual void Foo()
    {
        // do stuff...
    }
}

class C : Base
{
    public override void Foo()
    {
        base.Foo(); // <=== how do you do this line?
    }
}

4 个答案:

答案 0 :(得分:5)

使用operator ::

class Base
{
public:
    virtual ~Base() {}
    virtual void Foo()
    {
        // do stuff
    }
};

class C : public Base
{
public:
    void Foo()
    {
        Base::Foo();
    }
};

要在C ++中使用抽象类,至少有一个方法需要是纯虚拟的:

class Base
{
public:
    virtual ~Base() {}
    virtual void Foo() {}
    virtual void another_function() = 0; // Pure virtual function.
};

答案 1 :(得分:2)

像这样:

class base {
public:
    virtual void Foo() = 0;
}

class sub : public base {
public:
    void Foo() { 
        std::cout << "In Sub!" << std::endl;
    }
}

请注意virtual关键字的使用。在C ++中,除非显式声明,否则不会在运行时查找函数实现,例如C#,Objective-C或Java。因此,我们必须告诉运行时

'嘿,我们在这里有一个函数需要在运行时确定它的实现,所以不要假设它是类base,而是子类。'

另请注意函数声明的= 0部分。在C ++中,这描述了pure virtual函数。没有它,base不能是抽象的,除非在类中有另一个被称为pure virtual的函数。

答案 2 :(得分:1)

我想指出你可以在C ++中做到这一点。您只需在C ++中实现纯虚函数即可在.h:

中执行此操作
class Base
{
    public:
       Base();
       virtual ~Base();
       virtual void Foo()=0;
};

这是你的.cpp

void Base::Foo()
{
   std::cout<< "In Base::Foo which is pure virtual\n";
}

然后在你的派生类中执行其他人指示的内容,在Derived :: Foo()中你可以调用Base :: Foo()来产生输出。使函数成为纯虚函数并不能避免它具有可执行代码的能力。

答案 3 :(得分:0)

要在C ++中创建类抽象,需要为其提供纯虚函数。您的代码的C ++版本将是:

class Base
{
public:
    virtual void Foo() = 0; //setting a virtual function to 0 makes it pure virtual.     This is abstract.
}

class C : Base
{
public:
    void Foo()
    {
        Base::Foo(); //I don't think this line will work...You're calling an abstract method.
    }
}