C++ 当通过C+;中的指针绘图时,继承的类与其父类不兼容+;
考虑以下代码:从技术上讲,集合是一个向量,另外还有sort方法C++ 当通过C+;中的指针绘图时,继承的类与其父类不兼容+;,c++,inheritance,C++,Inheritance,考虑以下代码:从技术上讲,集合是一个向量,另外还有sort方法 template<class T> class collection { public: std::vector<T> vec; void sort(sortType<T>* U, bool compare(T, T)) { U->doSort(vec, compare) ; } } 模板 类集合 { 公众: std::vec; 无效排序(排序类型*U,布尔
template<class T>
class collection
{
public:
std::vector<T> vec;
void sort(sortType<T>* U, bool compare(T, T))
{
U->doSort(vec, compare) ;
}
}
模板
类集合
{
公众:
std::vec;
无效排序(排序类型*U,布尔比较(T,T))
{
U->doSort(vec,compare);
}
}
这是sortType类
template<class T>
class sortType
{
protected:
virtual void doSort(std::vector<T>&, bool compare(T, T)){};
}
模板
类排序类型
{
受保护的:
虚空doSort(std::vector&,bool-compare(T,T)){};
}
下面的代码是我想要使用的一些不同的排序方法
template<class T>
class insertionsort : public sortType
{
public:
void doSort(std::vector<T>&, bool compare(T, T))
{
//code of insertion sort
}
}
template<class T>
class quicksort : public sortType
{
public:
void doSort(std::vector<T>&, bool compare(T, T))
{
//code of quicksort
}
}
模板
类insertionsort:public sortType
{
公众:
void doSort(标准::向量和布尔比较(T,T))
{
//插入排序代码
}
}
模板
类快速排序:公共排序类型
{
公众:
void doSort(标准::向量和布尔比较(T,T))
{
//快速排序代码
}
}
比较是一个如下所示的函数:
template <class T>
bool greater( T l, T r)
{
if (l<r) return true;
return false;
}
insertionsort<int> U = insertionsort<int>();
collection<int> *Obj = new collection<int>();
Obj->sort(U, greater) ; //error here!
模板
布尔更大(tl,tr)
{
if(lsort(U,更大);//此处出错!
不幸的是,visual studio宣布我无法将insertionsort类传递给sortType类。我如何修复它并使用与前面类似的内容。感谢您的帮助
我已经编写了一个小代码来测试同样的问题
template<class T>
T doSomeThing(int a, int b, pheptoan<T>* U)
{
return U->dopheptoan<int>(a, b);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 6; int b = 7;
phepcong<int>* U = new phepcong<int>();
doSomeThing<int>(a, b, U); //error here
return 0;
}
模板
剂量测定法(int a、int b、pheptoan*U)
{
返回U->dopheptoan(a,b);
}
int _tmain(int argc,_TCHAR*argv[]
{
INTA=6;INTB=7;
phepcong*U=新的phepcong();
doSomeThing(a,b,U);//此处出错
返回0;
}
我假设您在集合
之前声明了排序类型
派生类应声明为
模板类插入排序:公共排序类型
模板类快速排序:公共排序类型
并且
collection::sort
使用指向sortType
的指针,因此最后一行应该是'Obj->sort(&U,更大)“我已经为测试这个问题编写了一个小代码。问题不在于继承。而是模板的问题。当我去掉模板并将其与int等普通类型一起使用时,不会发生任何事情。但是当我更改代码并与模板一起使用时,编译器会出现错误,因为sortType现在是一个模板类根据它,您需要说sortType,而不仅仅是sortType。您是从模板基类继承的。因此模板部分也是类类型的一部分。这就是为什么您需要在其名称中包含模板参数。我相信它应该是Obj->sort(&U,更大)。我也不确定您定义比较参数的方式是否有效语法。应该是bool(*compare)(T,T)afaikWhy使用按接口排序和按指针比较函数?比较可能也有状态。@Jarod42我不确定你的意思。我同意我在使用按接口排序时不专业,但使用按指针比较函数。我认为我只需要比较大小,所以我这样做了it@user2717954一开始,我也和你一样担心但实际上是这样吗worked@TrầnNgọcDũng:举例来说,您可能希望根据存储在其他数组()中的值对索引进行排序。