如何在C++中创建抽象基类
本文关键字:创建 抽象 基类 C++ | 更新日期: 2023-09-27 18:33:00
我将如何在C++中执行以下操作(以下代码是C#):
class Base
{
public virtual void Foo()
{
// do stuff...
}
}
class C : Base
{
public override void Foo()
{
base.Foo(); // <=== how do you do this line?
}
}
使用运算符::
:
class Base
{
public:
virtual ~Base() {}
virtual void Foo()
{
// do stuff
}
};
class C : public Base
{
public:
void Foo()
{
Base::Foo();
}
};
要在C++中有一个抽象类,至少有一个方法需要是纯虚拟的:
class Base
{
public:
virtual ~Base() {}
virtual void Foo() {}
virtual void another_function() = 0; // Pure virtual function.
};
像这样:
class base {
public:
virtual void Foo() = 0;
}
class sub : public base {
public:
void Foo() {
std::cout << "In Sub!" << std::endl;
}
}
请注意 virtual
关键字的使用。在C++中,除非明确声明,否则不会在运行时查找函数实现,例如 C#、Objective-C 或 Java。因此,我们必须告诉运行时
"嘿,我们这里有一个函数,需要在运行时确定它的实现,所以不要假设它是一个类base
,而是一个子类。
另请注意函数声明的= 0
部分。在C++中,这描述了一个pure virtual
函数。没有它,base
不能是抽象的,除非有另一个函数据说在类中pure virtual
。
我只想指出,你可以在C++做到这一点。您只需在C++中实现纯虚函数,即可在.h中执行此操作:
class Base
{
public:
Base();
virtual ~Base();
virtual void Foo()=0;
};
这在你的.cpp
void Base::Foo()
{
std::cout<< "In Base::Foo which is pure virtual'n";
}
然后在你的派生类中执行其他人所指示的操作,在你的 Derived::Foo() 中,你可以调用 Base::Foo() 这将产生输出。 使函数成为纯虚拟函数并不会消除它拥有可执行代码的能力。
要在C++中使类抽象,您需要为其提供一个纯虚函数。 代码的C++版本为:
class Base
{
public:
virtual void Foo() = 0; //setting a virtual function to 0 makes it pure virtual. This is abstract.
}
class C : Base
{
public:
void Foo()
{
Base::Foo(); //I don't think this line will work...You're calling an abstract method.
}
}