【发布时间】:2015-10-16 15:17:30
【问题描述】:
在 C++ 中(我相信自 C++ 11 起),只要程序员不希望编译器自动实现默认构造函数或赋值运算符,就可以“删除”构造函数或赋值运算符。
例如,一个可能,
class a
{
const a& operator=(const a& copy_me) = delete;
}
这将删除默认的赋值运算符。编译器不会为我们实现默认的operator=。我们根本无法在我们的代码中使用它,就好像它从未存在过一样。
考虑一个包含函数、虚函数和纯虚的抽象基类(或只是一个基类)。
class example_base
{
void function()
{
return;
}
virtual
void virtual_function() // Do we have to provide an implementation?
{
return;
}
virtual
void pure() = 0; // Are there other ways to declare a pure virtual?
// Can pure() have an implementation in this class?
}
如果另一个类继承自基类,我们是否允许“删除”基类中提供的某些功能? (第一季度)
如果是这样,它的规则和效果是什么? (第二季度)
如果后续的类继承自example_inherits,而我们删除了一些成员函数会怎样?我们可以再次使用它们吗? (第三季度)
class example_inherits : example_base
{
void function() = delete; // Allowed?
virtual
void virtual_function() = delete; // If so why ...
virtual
void pure() = delete; // ... or why not?
}
Q3 示例:
class another : example_inherits
{
// Allowed to use deleted function?
void function()
{
std::cout << "blaa" << std::endl;
}
}
您可能会想到我所描述的其他排列,例如实现一个已删除的方法 2 继承顺序较低。 (即,在从类继承的类中继承的类中......)
或者虚拟/纯虚拟顺序的不同选择...例如:一个类有一个虚拟纯,某些东西从这个类继承并继承与虚拟相同的功能,然后从这个继承的另一个类要么删除它,要么实现它作为一个常规功能......等等......
我们将不胜感激 - 我无法在网上找到如此详细的信息。
【问题讨论】:
-
@MattMcNabb 2个不同的案例有什么效果?
标签: c++ class oop inheritance polymorphism