c++ - 应用于基类列表的覆盖函数

标签 c++ inheritance overloading virtual

我只想知道有没有办法做这样的事情:

Class A {}; //Base class

Class B : A {}; //B inherits from A

Class C : A {}; //C inherits from A

...
...
...

void func(B){do x;}
void func(C){do y;}
...
...
...
list<A> l //l contains Bs or Cs.

for each element in l {func(element);}

并获得每个人的预期行为?

最佳答案

您可以执行以下操作:

    class A // Base clss
    {
       public: // or protected, depends on your needs
         virtual void func() {};
    };

    class B : public A //B inherits from A
    {
       public: // or protected, depends on your needs
         void func() { do x };
    }; 

    class C : public A //C inherits from A
    {
       public: // or protected, depends on your needs
         void func() { do y };
    }; 

    ...
    ...
    ...

    list<A*> l //l contains Bs or Cs.

    for each element in l { element->func(); }

通过这种方式,您可以使用多态性而不是重载静态函数 func。

关于c++ - 应用于基类列表的覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924573/

上一篇:C++打印数组

下一篇:c++ - 函数特化

相关文章:

c++ - 递归模板定义

c++ - 如何创建用于加密的自定义 ofstream 类

c++ - 我们在 C++ 中使用 "inherit"构造函数吗? "inheriting"的确切定义是什么

c++ - 为什么采用 int 的函数重载优于采用 unsigned char 的函数重载?

c++ - 重载时出现 undefined reference 错误

c++ - 复制列表和关联的迭代器

c++ - 模板数据结构 - 访问从抽象类派生的模板类的 getter 和 setter

C++ 内联类定义和对象初始化

c++ - 那么现在 struct 可以有虚函数并支持继承吗?那么与 classes 有什么区别呢?信息隐藏的真正目的是什么?

c++ - 根据参数类型推断重载函数的函数类型