基本 class 参考或派生 class 参考是什么意思?

what do you mean by base class reference or derived class reference?

我对 base class referencederived class reference 在向上转换和沮丧。

在下面的代码中,&ref有什么用?在 reference 中,它被标记为 base class referencederived class obj 已分配。

这背后的概念是什么?

#include <iostream>  
using namespace std;  
class Base  
{  
    public:  
        void disp()  
    {  
        cout << " It is the Super function of the Base class ";  
    }  
};  
  
class derive : public Base  
{  
    public:  
        void disp()  
        {  
            cout << "\n It is the derive class function ";  
        }  
      
};  
  
int main ()  
{  
    // create base class pointer  
    Base *ptr;  
      
    derive obj; // create object of derive class  
    ptr = &obj; // assign the obj address to ptr variable  
      
    // create base class's reference  
     Base &ref = obj;   
    // Or  
    // get disp() function using pointer variable  
      
    ptr->disp();  
    return 0;  
}  

虽然不清楚你在问什么,但我会尝试澄清一些关于这个话题的基础知识。

首先,reference 引用其他对象。引用本身不是一个对象。那么让我们看一些例子:

int n = 10;
int &r = n; // Here r is a reference to an int object

与您的代码片段类似,当您写道:

derive obj; //obj is an object of type derive
Base &ref = obj;  // ref is bound to the Base part of derive
Base *ptr = &obj; // ptr points to the Base part of derive

在上面的例子中,有两点需要注意:

  1. 因为派生对象包含子部分对应于它的基础class(es),我们可以像使用派生类型的对象一样使用派生类型的对象它的基本类型。特别是,我们可以将基class 引用或指针绑定到派生对象[=74=的基class部分] 如上所述。这种转换称为衍生到基础转换。
  2. 名为 ptr 的对象的 静态类型 Base*。而同一个对象ptr动态类型derive*。所以静态和动态类型不同。

另外,注意我们是able/allowed写的:

Base *ptr = &obj;

因为 .2/5 states -

If a base class is accessible, one can implicitly convert a pointer to a derived class to a pointer to that base class.

现在回到你的问题:

what is the use of &ref?

class Base  
{  
    public:  
        virtual void disp()  //VIRTUAL kewword USED HERE
    {  
        cout << " It is the Super function of the Base class ";  
    }  
};

如果在您的代码片段中,方法 disp()virtual,如上面修改后的代码片段所示,那么我们可以使用 refptr调用derive的方法disp()class。这是因为:

根据virtual function documentation

a virtual function is a member function you may redefine for other derived classes, and can ensure that the compiler will call the redefined virtual function for an object of the corresponding derived class, even if you call that function with a pointer or reference to a base class of the object.

所以当我们写:

ref.disp(); //this calls the derive class method disp() at runtime
ptr->disp(); //this calls the derive class method disp() at runtime

上面的result是在运行-时间[=71=调用了名为disp的derive class'函数],我们看到 It is the derive class function 打印在控制台上。

所以基本上的用途是我们可以在 运行 时间决定调用哪个方法(无论是 Base 的还是派生的)。

检查程序的输出 here