【问题标题】:Get child class of argument获取参数的子类
【发布时间】:2018-10-18 17:46:01
【问题描述】:

我有一个获取父类作为参数的方法。 我需要在编译时知道该参数的子类是什么。

class A{
...
};

class B: public A{
...
};

class C: public A{
...
};

void foo(A a){
    //is a specialized in B or C?
}

C c;
foo(c); //here it is C

【问题讨论】:

  • 解释为什么你认为你需要知道这一点。事实上,在 foo() 中,由于切片,它始终是 A 类型的对象。
  • 使用foo,如您所见,按值获取A 对象,它既不是 B 也不是C
  • 你应该有2个foo函数:void foo(B b){}void foo(C c){}
  • 解决你遇到的任何问题的方法要么是通过重载,要么是通过虚函数和多态。

标签: c++ inheritance multiple-inheritance


【解决方案1】:

你的期望背后的概念是一种编译时多态性......

可以通过函数重载来实现。

编写两个不同的函数并没有错(正如 cmets 中的 DimChtz 所说)....一个带有 B 类型的参数,另一个带有 C 类型的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2013-08-15
    • 2020-07-30
    相关资源
    最近更新 更多