使用抽象类的方法

时间:2010-03-27 19:45:32

标签: c++ abstract-class

是否可以使用抽象类的方法? 如何在没有实例的情况下使用类的方法?

3 个答案:

答案 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();
}