-4

我将如何在 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

4 回答 4

5

使用运算符::

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.
};
于 2012-05-01T15:13:00.690 回答
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类中有另一个函数。

于 2012-05-01T15:14:26.400 回答
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() ,它将产生输出。使函数成为纯虚拟函数并不能消除其具有可执行代码的能力。

于 2012-05-01T16:21:57.203 回答
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.
    }
}
于 2012-05-01T15:18:10.540 回答