-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++ で抽象クラスを作成するには、少なくとも 1 つのメソッドが純粋仮想である必要があります。

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 に答える