如何为从中继承的所有创建对象调用虚函数? C ++

时间:2016-03-12 19:09:14

标签: c++ class virtual-functions

例如,我有三个类:A,B :: A和C :: A,只有B和C有虚方法print(),就像那样:

#include <iostream>

using namespace std;

class A {
public:
    virtual void print() {
        return;
        //do nothing
    }

    static void Func() {
        //how to call all virtual functions print() for one class A?
        print(); //doesn't work
    }
};

class B : public A {
public:
    virtual void print() {
        cout << "B" << endl;
    }
};

class C : public A {
public:
    virtual void print() {
        cout << "C" << endl;
    }
};

int main() {
  B b1;
  B b2
  C c;
  A::Func();
  return 0;
}

我只使用类A对所有继承的对象(b1,b2,c)使用print()。我该怎么办?

1 个答案:

答案 0 :(得分:1)

声明A的静态类成员,它是指向A或其子类的所有实例的指针的容器。 std::list将是一个很好的选择:

class A {
   static std::list<A *> all_instances;
public:

   // ...
};

在A的构造函数中,将其this添加到列表中,保存新的列表条目的迭代器。在A的析构函数中,从列表中删除其列表条目。

现在您将拥有一个私有容器,它枚举A或其任何子类的所有实例。

此时编写一个调用每个print()方法的静态类方法变得微不足道。

当然,如果这是一个问题,那么实现线程安全需要一些额外的工作。

为A的构造函数或析构函数编写代码将是您的作业。