C++で純粋仮想関数呼び出しエラーを解決する方法

実装の提供がないピュア仮想関数の呼び出しによって、C++のピュア仮想関数呼び出しエラーが発生します。ピュア仮想関数は、定義がない関数であり、インターフェイスが宣言されているのみです。派生クラスでは、ピュア仮想関数に具体的な実装を提供する必要があります。以下に、このエラーを解決するためのいくつかの方法を示します。

  1. 純粋仮想関数の定義を提供します: 派生クラスで純粋仮想関数の具体的なロジックを実装します。例:
class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

class Derived : public Base {
public:
    void foo() override {
        // 实现具体逻辑
    }
};
  1. 派生クラスを抽象クラスとして定義する: 派生クラスが純粋仮想関数の実装を提供するつもりがない場合、派生クラスを抽象クラスとして定義することができます。抽象クラスは純粋仮想関数を含むクラスで、インスタンス化するこができません。例えば:
class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

class Derived : public Base {
public:
    // 没有为纯虚函数提供具体实现
};

int main() {
    Derived d; // 编译错误,Derived是抽象类
    return 0;
}
  1. オーバーライドする
  2. オーバーライド
class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

class Derived : public Base {
public:
    void foo() { // 错误:忘记使用override关键字
        // 实现具体逻辑
    }
};

int main() {
    Derived d; // 编译错误,Derived没有正确重写foo函数
    return 0;
}

純粋仮想関数は、デフォルト実装をもつ場合があります。派生クラスが独自の実装を提供しない場合、基底クラスにあるデフォルト実装が使用されます。例えば:

class Base {
public:
    virtual void foo() = 0; // 纯虚函数
};

void Base::foo() {
    // 默认实现
}

class Derived : public Base {
public:
    // 没有提供自己的实现
};

int main() {
    Derived d; // 编译通过,使用基类中的默认实现
    return 0;
}

上記の解決策がC++のpure virtual function callエラーの解決に役立つことを願っています。

bannerAds