[英]Abstract class and pure method C++
我已经读过一本书Stephen Prata-“ C ++ Primer Plus VI Edition”,在抽象类中,我可以编写纯方法的定义。 我知道我可以编写例如void pure() = 0
,然后可以在此类中定义该方法。 我认为= 0
只是使该类抽象,如果我使另一个类继承自该类,则不必覆盖它(我不知道“ overwrite”一词是否正确,我的意思是我要' t通过在辅助类中编写具有相同名称的方法来从基本类中隐藏该方法)。
我在编译器中检查了它,并得到警告“它没有替代程序”。 因此,如果我必须在辅助类中覆盖此纯虚拟方法(抽象类中具有定义),那么如何在基本类中使用此定义? 它没用吗?
您是否正在寻找这样的东西:
class Abstract {
public:
virtual void f() = 0;
};
// A pure virtual function can still be defined.
// It has to be defined out-of-class.
void Abstract::f() {
// Do something
}
class Concrete : public Abstract {
public:
void f() {
Abstract::f(); // call base class implementation
// Do something more
}
};
这是一个解释纯函数概念的示例
#include <iostream>
struct A
{
virtual ~A() = default;
virtual void what() const = 0;
};
void A::what() const
{
std::cout << "struct A";
}
struct B : A
{
virtual void what() const = 0;
};
void B::what() const
{
A::what();
std::cout << ", struct B : A";
}
struct C : B
{
void what() const;
};
void C::what() const
{
B::what();
std::cout << ", struct C: B";
}
int main()
{
// A a; compiler error
// B b; compiler error
C c;
const A &rc = c;
rc.what();
std::cout << std::endl;
return 0;
}
程序输出为
struct A, struct B : A, struct C: B
在此示例中,类A和B是抽象的,因为它们具有纯虚函数,尽管它们每个都提供了其纯虚函数的相应定义。
而且只有类C不是抽象的,因为它将虚函数重新声明为非纯虚函数。
如果要实例化继承的类,即创建此类型的对象,则必须在继承的类中实现所有纯虚方法。
换句话说,纯虚拟方法不仅定义了类接口,还迫使您提供其实际实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.