【问题标题】:How can I solve this problem with chain inheritance c++?如何使用链继承 C++ 解决这个问题?
【发布时间】:2022-01-22 00:43:00
【问题描述】:

基本上我在我的大学里学习链继承,我希望用这个来构建一个程序,我遇到的问题出在这部分:

template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE> {
  bool dadoValido(NUM_TYPE& d) const override {
    // TODO: Implemente este metodo.
    if (d > 0){
        return true;
    }else{
        return false;   
    }
  }
};
class FilterNaturalString: public Filtro<std::string> {
  bool dadoValido(std::string& d) const override {
    std::string::const_iterator it = d.begin();
    while (it != d.end() && std::isdigit(*it)) ++it;
    return !d.empty() && it == d.end();
  }
};

void convert2int(std::vector<std::string>& in, std::vector<int>& out) {
    Filtro<std::string>* new_check;
    new_check = new FilterNaturalString;
    for(std::string i : in){
        if(new_check->dadoValido(i)){
            out.push_back(stoi(i));
        }
      
    }
}
template <class NUM_TYPE> void test_filter_square_roots() {
    std::vector<unsigned> entrada;
    std::vector<unsigned> saida;
    read_input(entrada);
    Filtro<int>* new_check;
    new_check = new FilterPositiveNumber;
}

我收到此错误

error: invalid use of template-name ‘FilterPositiveNumber’ without an argument list
     new_check = new FilterPositiveNumber;

如果我在对 FilterNaturalString 执行操作时以完全相同的方式调用“Filtro”,我不明白为什么在第二次尝试实例化“Filtro”时会出错。

【问题讨论】:

    标签: c++ oop inheritance


    【解决方案1】:
    template <class NUM_TYPE>
    class FilterPositiveNumber: public Filtro<NUM_TYPE>
    {
    ...
    };
    

    定义一个类模板,一个潜在的类族的蓝图。要使用它,您必须告诉编译器,或者编译器必须能够推断出模板要专门化的类型才能成为一个类。

    class FilterNaturalString: public Filtro<std::string> 
    {
    ...
    };
    

    定义一个类。

    所以

    new_check = new FilterNaturalString;
    

    有效但

    new_check = new FilterPositiveNumber<int>;
    

    需要允许编译器填写空白并创建一个可以从模板实例化的类。

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多