c++ 我如何访问模板类中的虚拟方法,该方法将在派生类中被重写

问题描述 投票:0回答:1

我有一个模板化基类,带有 2 个虚拟方法 begin() 和 end()。

我还有 Derived1 类,派生自 Base 类和 Derived2 类,派生自 Derived1 类。

我重写第一个派生类中的方法“begin()”,并重写第二个派生类中的方法“end()”。

Bud 我无法在我的第一个派生类中访问/使用方法“end()”。为什么?

#include <iostream>

template <class T>
class Base {
public:
    virtual T begin() = 0;

    virtual T end() = 0;
};

template <class T>
class Derived1 : public Base<T> {
public:
    T begin() override {
        return Base<T>::end() - 10;     // not working
        // return end() - 10;           // also not working
    }
};

template <class T>
class Derived2 : public Derived1<T> {
public:
    T end() override {
        return 10;
    }
};

int main() {
    Derived2<int> derived2;
    std::cout << derived2.begin() << "\n";
    std::cout << derived2.end() << "\n";
}
c++ templates inheritance overriding virtual
1个回答
1
投票
#include <iostream>

template <class T>
class Base {
public:
    virtual T begin() = 0;
    virtual T end() = 0;
};

template <class T>
class Derived1 : public Base<T> {
public:
    T begin() override {
        return this->end() - 10;  // Access end() from the immediate base class
    }
};

template <class T>
class Derived2 : public Derived1<T> {
public:
    T end() override {
        return 10;
    }
};

int main() {
    Derived2<int> derived2;
    std::cout << derived2.begin() << "\n";
    std::cout << derived2.end() << "\n";
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.