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