【问题标题】:Passing inherited class to function in c++将继承的类传递给C++中的函数
【发布时间】:2012-01-22 19:29:38
【问题描述】:

我在 C++ 中的继承遇到了一个小问题,我不太明白。

所以,假设我有一些从 stl 列表派生的类,即:

class Class1: public list<T>{
      virtual func1();

}

class Class2 : public Class1<w/e>{
         func1();
}

我遇到的问题是将这些传递给函数时。我怎样才能正确地将其中一个实例传递给函数,以便如果可以传递任一类型的实例,它将使用正确的虚函数?我有一段时间没有做过继承和虚函数,所以我在这里有点生疏。 (这假设该函数不是类的成员函数)。

【问题讨论】:

    标签: c++ inheritance virtual-functions


    【解决方案1】:

    您需要将它们作为参考传递给函数

    int function(Class1& obj);
    

    或作为指针;

    int function(Class1* obj);
    

    它应该直接调用正确版本的虚拟方法。

    如果你在没有其中任何一个的情况下通过它们

    int function(Class1 obj);
    

    对象将被复制构造为在函数中始终是 Class1,并且将始终调用 Class1::func1()

    【讨论】:

    • 所以在函数调用中我假设它是基类,在运行时它会决定它实际上是哪个?
    • 没错,因为这两个类至少是一个 Class1,这将允许传入任何一个,并决定运行时调用哪个虚拟方法。
    • 它始终是基类。类的每个实例它派生自的每个类的实例。虚函数的目的是允许代码调用基类实例上的函数并调用该函数的正确版本。
    猜你喜欢
    • 2014-04-28
    • 1970-01-01
    • 2019-09-25
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多