#include <iostream>
using namespace std;
class base
{
public:
virtual void taunt() = 0;
virtual void hide() = 0;
};
template <int nx, int ny>
class derivedA : public base
{
void hide();
public:
void taunt() { cout << "derivedA" << endl; }
char c[nx][ny];
};
template <int nx, int ny, int nz>
class derivedB : public base
{
void taunt();
public:
void hide() { cout << "hide B" << end; }
char c[nx][ny][nz];
};
int main()
{
derived * dp = new derivedA();
dp->taunt();
delete dp;
DerivedB b;
dp = &b;
dp->hide();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
A和B都是从纯虚拟类库派生的,并且都有一个未实现的方法.保留一个未实现的方法是否合法?让一个方法未实现是可以接受的还是好的做法?还有更好的方法吗?
编辑:我刚注意到这些类不是从base派生的.我已经改变了代码,所以它确实如此.
如果从具有纯虚方法的类派生并且未在派生类中重写该方法,则该派生类也将是抽象类.如果这对你来说没问题(例如你会进一步得出它),那么你可以做到这一点.如果您确实要实例化该派生类,则必须覆盖所有纯抽象方法
请注意,在你的榜样,你不要从抽象的派生base类:既derivedA和derivedB是独立的类.你需要:
class derivedA : public base {
//...
};
Run Code Online (Sandbox Code Playgroud)