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

Posted

技术标签:

【中文标题】c++ 创建类的实例作为引用类型【英文标题】:c++ create an instance of the class as a reference type 【发布时间】:2015-07-14 04:08:58 【问题描述】:

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

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

债券.h

#pragma once

class Bond 

private:
    int myValue;
public:
    int a;
;

债券.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;

【问题讨论】:

我强烈建议您不要发布家庭作业问题,而是发布您解决家庭作业问题的尝试以及关于您认为自己在做什么以及您认为什么不起作用的评论。 这是我编写的代码。但是,有一些错误。喜欢:LNK2019...... 构造函数、析构函数等的实际代码在哪里?链接器将需要它们。 【参考方案1】:

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

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

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

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

MuniBond& m_refToObj = *m_obj;

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

【讨论】:

【参考方案2】:

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

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

要获得参考:

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

或者,在 C++11 中,您可以使用右值引用 (&amp;&amp;),它将获取右值实例化的所有权,并使对象在其存在的行之后保持“活动”。

MuniBond&amp;&amp; m_ObjRvalRef = MuniBond(5);

【讨论】:

以上是关于c++ 创建类的实例作为引用类型的主要内容,如果未能解决你的问题,请参考以下文章

C# 泛型是引用类型还是值类型,是根据啥判断?

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

当对象的引用作为参数时,可以直接打点访问该对象的私有成员(c++)

C++:从实例出发,搞定引用在不同场景的用法

C++将模板的声明和定义放置在同一个头文件里

C++学习基础六——复制构造函数和赋值操作符