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

时间:2015-07-14 04:08:58

标签: c++ inheritance reference instance

创建一个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;
}

2 个答案:

答案 0 :(得分:0)

“参考类型”是您老师的一个奇怪的单词选择。它实际上有一个非常具体的含义,但与问题的含义并不完全相关(使用该词的通常含义,你不能创建一个参考类型的“实例”...你必须创建作为参考类型的“变量”)。您应该查看课堂笔记,以确定教师的意思。

如果我不得不猜测,我猜他们想要你创建一个MuniBond的实例,然后创建一个类型是引用它的“引用类型”的变量。引用类型使用&符号表示,因此int&是“对int的引用”

如果这是对老师单词选择的正确解释,那么你几乎就在那里!你已经创建了一个Munibond的实例,并且你已经存储了一个指向它的指针(m_obj)。我们需要做的就是创建一个变量,它是“对MuniBond的引用”或MuniBond&并让它引用m_obj指向的对象。使用m_obj“解除引用”*很容易做到这一点。解除引用是一个C ++运算符,它接受指向某个实例对象(您拥有)的指针,并生成对该对象(您想要的)的引用。鉴于您的代码中已有指针,您可能已经使用过此*运算符。如果没有,我建议阅读它,因为它非常强大,我现在不关注它。

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

MuniBond& m_refToObj = *m_obj;

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

答案 1 :(得分:0)

引用类型用&表示(与用*指定的指针相对)。您可以将引用视为类似于隐式指针。

作为一种良好的做法,除非绝对必要,否则请避免使用new,如果这样做,将其包装在unique_ptr或其他指针管理类型中是一个好主意。

获得参考:

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

或者,在C ++ 11中,您可以使用rvalue-reference(&&),它将获得rvalue实例化的所有权,并使对象“存活”超过它存在的行。

MuniBond&& m_ObjRvalRef = MuniBond(5);