我的基类是一个完全由纯虚函数构成的类:
class IntSet {
// OVERVIEW: a mutable set of bounded size containing integers
public:
virtual void insert(int v) = 0;
// MODIFIES: this
// EFFECTS: set = set + {v} if room, throws IntSetFull otherwise
virtual void remove(int v) = 0;
// MODIFIES: this
// EFFECTS: set = set - {v}
virtual bool query(int v) = 0;
// EFFECTS: returns true if v is in set, false otherwise
virtual int size() = 0;
// EFFECTS: returns |set|
};
class IntSetImpl:public IntSet{
//.....
};
其实现具体由导出类实现,但是对于用户来讲只能看见纯虚类,所以调用产生了问题,因为纯虚类是抽象类,无法生成具体实例
于是想用一个static数据成员
static IntSet *getIntSet();
// EFFECTS: returns a pointer to the IntSet
返回一个指向 IntSetImpl类型的指针,这样不需创建任何对象就能在调用
IntSet* i=IntSet::getIntSet(),这样就能让用户通过指针操作,实现完全封装
但是,关于以下这个函数的定义应该写在哪里?
static IntSetImpl i;
IntSet *getIntSet() { return &i; }
头文件和源文件里分别写什么?谢谢各位了
class IntSet {
// OVERVIEW: a mutable set of bounded size containing integers
public:
virtual void insert(int v) = 0;
// MODIFIES: this
// EFFECTS: set = set + {v} if room, throws IntSetFull otherwise
virtual void remove(int v) = 0;
// MODIFIES: this
// EFFECTS: set = set - {v}
virtual bool query(int v) = 0;
// EFFECTS: returns true if v is in set, false otherwise
virtual int size() = 0;
// EFFECTS: returns |set|
};
class IntSetImpl:public IntSet{
//.....
};
其实现具体由导出类实现,但是对于用户来讲只能看见纯虚类,所以调用产生了问题,因为纯虚类是抽象类,无法生成具体实例
于是想用一个static数据成员
static IntSet *getIntSet();
// EFFECTS: returns a pointer to the IntSet
返回一个指向 IntSetImpl类型的指针,这样不需创建任何对象就能在调用
IntSet* i=IntSet::getIntSet(),这样就能让用户通过指针操作,实现完全封装
但是,关于以下这个函数的定义应该写在哪里?
static IntSetImpl i;
IntSet *getIntSet() { return &i; }
头文件和源文件里分别写什么?谢谢各位了