方法隐藏而不是静态虚拟C++

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

我想创建一个实用程序类(通常是静态的)并将其与 OOP 的抽象相结合。

我的问题是:使用方法隐藏将抽象与静态结合起来是一个很好的实践吗? 因为 C++ 不允许静态虚拟

class Sort {
private:
    static void sort(int *arr, int size);
};

class SelectSort: public Sort {
public:
    static void sort(int *arr, int size);
};


class InsertSort: public Sort {
public:
    static void sort(int *arr, int size);
};

所以我们有一个模仿 Java 接口的 Sort 类。

-> 我们说:“所有继承 Sort 类的东西都应该有 sort() 方法”

-> 此外,我们不需要排序类的实例,因此它们是静态的。

现在,我们可以在不创建类实例的情况下调用静态实用方法,并且还使用了抽象。

SelectSort::sort(arr, length);

我尝试过将静态方法设为虚拟

class Sort {
private:
    virtual static void sort(int *arr, int size);
};

并出现以下错误:

错误:成员“sort”不能同时声明为“virtual”和“static”

我应该使用方法隐藏还是我不应该打扰而只选择一个概念 - 要么进行排序静态要么使用多态性

我知道方法隐藏不是真正的多态性,但是在语言语义不允许的情况下我们可以模仿多态性。

我用它是为了让程序员知道,而不是为了让编译器知道。

我的问题更多的是关于正确的设计方法。我的猜测是,所有三种解决方案(静态、多态性、方法隐藏)都是有效的。但哪种方法更可取?

c++ static polymorphism virtual method-hiding
1个回答
0
投票

使用 std::function 能够将自定义排序函数传递给另一个函数的示例

#include <span>
#include <vector>
#include <functional>

namespace myAlgorithms
{
    
void quick_sort_sort(std::span<int> data)
{
}

void bubble_sort(std::span<int> data)
{
}

} //namespace myAlgorithms

void function_using_sort_function(std::span<int> values, std::function<void(std::span<int>) sorter )
{
    
}


int main()
{
    std::vector<int> values{5,7,4,3,1,8};
    function_using_sort_function(values,myAlgorithms::bubble_sort);
}
© www.soinside.com 2019 - 2024. All rights reserved.