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?
}
}
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?
}
}
使用演算子::
:
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.
};
このような:
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
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() を呼び出すことができます。関数を純粋仮想化しても、実行可能コードを持つ機能がなくなるわけではありません。
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.
}
}