我可以在c ++抽象类中添加什么类型的成员

时间:2012-12-11 08:56:39

标签: c++ function polymorphism pure-virtual

Hello说我有一个抽象类,它有一些纯抽象函数,我有一些派生自这个类的类,这些类中的所有数据最终都变得相似了,我想知道它是否明智甚至是可以在抽象类中声明受保护的向量来收集数据,如。

class A
{
protected:
    vector <string> str;
public:
    virtual function x();
    virtual function y(); //etc etc
    virtual ~A(){;}
};

class B : public A
{
public:
    function x();
    function y();
};

class C: public A
{
    //similar to class B
} ;

我很难理解纯虚函数如何与c ++一起工作,我理解多态,因为我在java中用它做了很多项目。是否可以声明并使用该向量,因为c ++中的抽象类无法实例化?

4 个答案:

答案 0 :(得分:1)

纯虚拟成员函数声明为

virtual <return-type> func(<parameters>) = 0;

它们只是虚函数,它们也可以像任何其他虚函数一样工作。通常,他们没有或不需要实现,但如果您愿意,可以提供一个。

您可以在C ++中将所需的任何成员添加到抽象类中。抽象类只是一个带有一个或多个纯虚拟成员函数的常规类。

答案 1 :(得分:1)

I was wondering if it would be wise or even possible to declare a vector under protected in the abstract class to collect the data.

是的,提升在几种派生类型之间共享的数据成员是合法的设计选择。

What type of members can I add in a c++ abstract class?

您可以在抽象类中添加任何类型的成员。通常,应该初始化类的数据成员,并仅将其分配给该类的构造函数和其他成员函数。否则会破坏封装,从而使类的维护和修改变得更加困难。

I am having difficulty understanding how pure virtual functions work with c++

通过在声明的末尾放置= 0,将虚函数指定为纯函数。您不必为纯虚函数提供定义。

您不能声明抽象基类的实例;在声明其他类时,您只能将它用作基类。

答案 2 :(得分:0)

  1. 我在这里看不到任何抽象类
  2. 您可以将任何类型的成员包含在抽象类

答案 3 :(得分:0)

比什么更重要,就是为什么。

抽象类不仅仅是“所有函数都是纯虚拟的类”。它代表了面向对象编程中的某种意识形态。当用作接口时,它们不应包含状态。