不实施方法是否合法和良好做法
Is it legal and good practice to leave methods unimplemented?
#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;
}
A 和 B 都派生自纯虚拟类库,并且都有一个未实现的方法。不实施一种方法是否合法?不实施一种方法是可以接受的还是好的做法?有没有更好的方法?
编辑:我刚刚注意到这些类不是从 base 派生的。我已经更改了代码,以便它这样做。
如果从具有纯虚方法的类派生,并且未在派生类中重写该方法,则该派生类也将是抽象类。 如果这对你来说是可以的(例如,你会进一步推导它),那么你就可以这样做。 如果您确实想要实例化该派生类,则必须重写所有纯抽象方法
请注意,在您的示例中,您不是从抽象base
类派生的:derivedA
和 derivedB
都是独立的类。 你需要:
class derivedA : public base {
//...
};
不允许实例化任何具有纯虚拟成员函数的类。你当然可以有这样一个类,但它的任何实例都必须是子类,其中所有纯虚都被赋予了定义。
相关文章:
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 检查类是否在方法中实例化
- C 编译时间检查模板类型中是否存在方法
- 是否有方法为模板参数指定所需的定义
- 用于确定类型是否具有方法的 SFINAE
- 是否有方法将相对库路径添加到可执行文件以避免设置LD_library_path
- 是否有方法将所有赋值运算符(+=、*=等)转发为隐式使用重写的直接赋值运算符(=)
- 是否有方法使用vector的内容作为键和自定义值来初始化unordered_map ?
- 在调用main函数之前,是否有方法解析命令行选项?
- 在c++中是否有方法对成员变量(类)进行后期初始化?
- 是否有方法为任何指针类型定义转换操作符
- 是否有方法为窗口窗体中的特定按钮挂钩鼠标事件
- 是否有方法检测内联函数ODR违规
- 在Windows Vista+上不注册proppage.dll,是否有方法访问远程过滤器图?
- 是否有方法使Visual Studio对include区分大小写
- 是否有方法在调用函数时防止隐式的static_cast ?