我想只为客户端公开CreateSort()。它是为了实现sort类创建一个对象,即imSort然后将它返回给客户端。但是编译器说它不能创建一个抽象类的对象,尽管已经在派生类中定义了所有函数。
/////sort.h
class __declspec(dllexport) Sort {
public:
virtual int* BSort() const=0;
virtual void getdata() const=0;
};
extern "C" Sort *CreateSort();
/////imSort.h
#include "Sort.h"
class imSort : public Sort{
private:
int i,j,num;
int temp;
int *a;
public:
imSort();
int* BSort();
void getdata();
}
/////imSort.cpp
#include <iostream>
#include "imSort.h"
Sort *CreateSort()
{
return new imSort(); /* object of abstract class type "imSort" is not allowed: */
}
imSort::imSort()
{
i=j=num=0;
*a=0;
}
void imSort::getdata()
{
std::cout<<"\nEnter the number of elements..";
std::cin>>num;
for(i=0;i<num;i++)
{
std::cin>>*a;
*(a++);
}
}
int* imSort::BSort()
{
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
{
if(*(a+i)<*(a+j))
{
temp=*(a+i);
*(a+i)=*(a+j);
*(a+j)=temp;
}
}
return a;
}
答案 0 :(得分:2)
您的基类有:
virtual int* BSort() const=0;
virtual void getdata() const=0;
但你的派生类有:
int* BSort();
void getdata();
重复virtual
关键字是可选的,但没有const
这些是单独的功能,与虚拟基本功能无关。
因此,这些纯虚函数在派生类中保持不被覆盖,因此如果你问我,imSort
(类型的傻名称)仍然是抽象的。
因此,您的固定派生类定义是:
class imSort : public Sort {
private:
int i, j, num;
int temp;
int* a;
public:
imSort();
int* BSort() const; // <--- const
void getdata() const; // <--- const
}; // <--- ;
(请注意缩进如何提高代码的易读性?您忘记了类定义末尾的;
。)
请在下次写一个完整格式的问题,并将您的问题减少到最小的测试用例。
答案 1 :(得分:0)
如果抽象Sort
类中的虚函数声明为const
,那么imSort
类中的实现也应如此,但它们不是。
所以只需在这里添加const ......