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

标签 c++ function polymorphism pure-virtual

你好,假设我有一个抽象类,它有一些纯抽象函数,我有一些派生自这个类的类,这些类的所有数据最终变得相似,我想知道这是否明智,甚至可以在抽象类中声明一个 protected vector 来收集数据,例如。

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++ 中的抽象类,甚至可以声明和使用该 vector 吗?

最佳答案

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 来指定虚函数为纯函数。您不必为纯虚函数提供定义。

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

关于c++ - 我可以在 C++ 抽象类中添加什么类型的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816728/

相关文章:

c++ - 在 C++ 中不能内联虚函数总是正确的吗?

arrays - 如何在 Robo3T 中将结果从一个查询传递到另一个查询

r - 规范化具有多个条件的数据帧,R

c++ - 什么时候静态调用虚函数?

ruby-on-rails - 多态 Ruby SimpleDelegator

java - 如何使用 JsonTypeInfo 和反/序列化器来自定义处理多态子类型?

c++ - 什么是 C/C++ for Windows 中基于共享内存的轻量级 IPC 机制?

c++ - 在 C++ 中获取 long 和 double 模的准确方法

c++ - 值初始化是否适用于原子对象?

jquery - onclick 事件不运行 jQuery 函数