是否可以使用抽象类的方法? 如何在没有实例的情况下使用类的方法?
答案 0 :(得分:6)
如果将方法声明为static
,则可以直接调用它而无需类实例。否则,您将需要一个派生类的实例。
由于抽象类无法直接实例化,因此无法直接调用抽象类的方法,除非它是静态方法。但是你可以直接调用抽象类的静态方法,这是一个简单的例子:
#include <iostream>
#include <ostream>
#include <fstream>
using namespace std;
class stest{
public:
static void test();
virtual void a() = 0;
};
void stest::test(){ cout << "test\n"; }
int main(){
stest::test();
return 0;
}
或者,如果您有一个派生自抽象类的类的实例,您可以将其视为抽象类的实例,并可以调用它上面的任何方法。
答案 1 :(得分:5)
Abstract类并不意味着您没有实例,它意味着实例的运行时类型实际上是一些派生类,它为抽象基类中的纯虚函数提供实现。但并非抽象类的所有成员函数都必须是纯虚函数,您可以混合使用具体函数和抽象函数。
当您在“抽象类”上调用成员函数时,所有虚函数(包括纯虚函数)都会以多态方式调用。因此,派生类中定义的覆盖将被执行。非虚函数调用基类中的定义,您不能拥有纯粹的具体函数,因此即使抽象类也必须为非虚函数提供实现。
纯虚函数甚至可以具有抽象基类提供的实现。仍然必须提供覆盖,但是覆盖可以调用基类实现。
答案 2 :(得分:0)
我认为你可以使用指针来做到这一点。
#include <iostream>
class A
{
public:
virtual void showName()=0;
void show(){std::cout<<"class A"<<std::endl;}
};
int main()
{
A *a;
a->show();
}