c++创建类的实例作为引用类型

c++ create an instance of the class as a reference type

本文关键字:引用类型 实例 创建 c++      更新时间:2023-10-16

创建一个Bond类和一个继承Bond的MuniBond类。创建一个简单的程序并创建一个MuniBond类的实例作为引用类型。

不知道如何创建MuniBond类的实例作为引用类型。

Bond.h

#pragma once
class Bond 
{
private:
    int myValue;
public:
    int a;
};

Bond.cpp

#pragma once
#include "Bond.h"

class MuniBond : public Bond 
{
private:
    int myValue;
public:
    MuniBond(int);
    ~MuniBond(void);
    void set_Value(int);
    int get_Value();
};

Main.cpp

#include "stdafx.h"
#include "Bond.h"
#include "MuniBond.h"
#include <iostream>
using namespace std;
int _main()
{
     MuniBond *m_obj = new MuniBond (5);
     cout << m_obj->get_Value()<<endl;
    delete m_obj;
    return 0;
}

你的老师用了一个奇怪的词"Reference type"。它实际上有一个非常具体的含义,但与问题所问的内容并不完全相关(使用该词的通常含义,您不能创建引用类型的"实例"……您必须创建一个引用类型的"变量")。你应该复习课堂笔记,以确定老师的意思。

如果我必须大胆猜测,我猜他们想让你创建一个MuniBond的实例,然后创建一个类型是引用类型的变量来引用它。引用类型使用&符号表示,因此int&是"对int的引用"

如果这是对老师选词的正确理解,那么你就差不多成功了!你已经创建了一个Munibond的实例,并存储了一个指向它的指针(m_obj)。我们所需要做的就是创建一个变量,它是"对MuniBond的引用"或MuniBond&,并让它引用m_obj所指向的对象。这很容易通过使用*"解引用"m_obj来实现。解引用是一个c++操作符,它接受一个指向某个实例对象的指针(你已经有了这个对象),并产生一个对这个对象的引用(你想要的那个对象)。如果代码中已经有了指针,那么您可能已经使用过这个*操作符。如果没有,我建议你读一下它,因为它非常强大,我现在没有关注它。

你需要的最后一行(假设我正确地翻译了你老师的措辞),是一些类似

的东西
MuniBond& m_refToObj = *m_obj;

现在m_refToObj是对m_obj指向的同一个实例的引用

引用类型用&表示(与用*指定的指针相反)。你可以把引用看作类似于隐式指针。

作为一个良好的实践,避免使用new,除非绝对必要,如果你这样做,包装在unique_ptr或其他指针管理类型之一是一个好主意。

获取引用:

MuniBond m_Obj(5); //stack-based instantiation MuniBond& m_ObjRef = m_Obj;

或者,在c++ 11中,您可以使用右值引用(&&),它将获得右值实例化的所有权,并使对象在其存在的行之外保持"存活"。

MuniBond&& m_ObjRvalRef = MuniBond(5);