c++创建类的实例作为引用类型
c++ create an instance of the class as a reference type
创建一个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的引用"
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);
相关文章:
- 强制转换为引用类型
- 如何检查派生类的类型?(C++实例)
- 自定义引用类型
- 为什么我不能引用指向实例化对象的函数的指针?
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- 为什么我不能在运算符=中使用引用类型?
- 可变参数模板函数参数和引用类型推导
- 隐式可转换参数,但属于引用类型
- 如何告诉自动推断向量<bool>元素的非引用类型
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 为什么"const auto [x, y]"绑定到引用类型时没有按预期运行?
- 对于多态类型T,如何在没有类型T实例的情况下获得指向T的虚拟表的指针
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 为什么引用类型在使用临时对象访问时是左值
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 如何使用引用类型实例化模板函数
- 为什么模板不隐式实例化为const或引用类型?
- 如何在 C++11 中将 vector 与引用类型实例对象一起使用
- c++创建类的实例作为引用类型
- 基于类类型的引用计数实例