0

你好,假设我有一个抽象类,它有几个纯抽象函数,我有几个从这个类派生的类,这些类的所有数据最终变得相似,我想知道是否明智甚至可以声明抽象类中受保护的向量来收集数据,就像这样。

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

4 回答 4

1

纯虚成员函数声明为

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

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

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

于 2012-12-11T09:06:55.253 回答
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 将虚函数指定为纯虚函数。您不必为纯虚函数提供定义。

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

于 2012-12-11T10:35:59.257 回答
0
  1. 我在这里看不到任何抽象类
  2. 您可以将任何类型的成员包含到抽象类中
于 2012-12-11T09:05:11.377 回答
0

比什么更重要的是为什么。

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

于 2012-12-11T09:08:14.433 回答