2015-07-14 4 views
-3

Создайте класс Bond и класс MuniBond, который наследуется от Bond. Создайте простую программу и создайте экземпляр класса MuniBond в качестве ссылочного типа.C++ создайте экземпляр класса как ссылочный тип

Не знаю, как создать экземпляр класса 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

я настоятельно рекомендую, вместо того, чтобы разместить домашние вопросы, вы размещаете ваши попытки решить проблему домашнего задания вместе с комментариями относительно того, что вы думаете, что вы делаете и что вы думаете, что не работаете. – iAdjunct

+0

Вот код, который я сделал. Однако есть некоторая ошибка. Например: LNK2019 ...... – Jeff

+0

Где фактический код для конструктора, деструктора и т. Д.? Компилятор им понадобится. – Bathsheba

ответ

0

"Тип задания" странный выбор слова от своего учителя. Это действительно имеет очень специфическое значение, но не совсем связано с тем, что задает вопрос (используя обычные значения слова, вы не можете создать «экземпляр», который является ссылочным типом ... вам нужно создать «переменная», которая является ссылочным типом). Вы должны пересмотреть свои заметки в классе, чтобы определить, что означает учитель.

Если бы мне пришлось рисковать догадкой, я бы предположил, что они хотят, чтобы вы создали экземпляр MuniBond, а затем создайте переменную, тип которой является «ссылочным типом», который относится к ней. Ссылочные типы обозначаются символом &, поэтому int& является «ссылкой на int».

Если это правильная интерпретация выбора слова вашего учителя, вы почти там! Вы уже создали экземпляр своего Munibond, и вы сохранили указатель на него (m_obj). Все, что нам нужно сделать, это создать переменную, которая является «ссылкой на MuniBond», или MuniBond& и ссылаться на объект, на который указывает объект 10. Это легко сделать с помощью «разыменования» m_obj с использованием *. Dereferencing - это оператор C++, который принимает указатель на какой-либо экземплярный объект (который у вас есть) и создает ссылку на этот объект (который вы хотите). Учитывая, что у вас уже есть указатели в коде, вы, вероятно, уже использовали этот оператор *. Если нет, я рекомендую прочитать на нем, потому что он очень мощный, и я не фокусируюсь на нем прямо сейчас.

В последней строке вам нужно будет (при условии, я перевести формулировку своего учителя правильно), что-то вдоль линий

MuniBond& m_refToObj = *m_obj; 

Теперь m_refToObj является ссылкой на тот же экземпляр, что m_obj точки в.

0

Опорный тип обозначается & (в отличие от указателя, который указан *). Вы можете думать, что ссылка похожа на неявный указатель.

В качестве хорошей практики избегайте использования new, если это абсолютно необходимо, и если вы это сделаете, то ее можно будет обернуть в unique_ptr или один из других типов управления указателями.

Чтобы получить ссылку:

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

Кроме того, в C++ 11 вы можете использовать RValue-ссылку (&&), который будет брать на себя ответственность в качестве RValue конкретизации и сохранить объект "живой" мимо линии, в которой она существовала.

MuniBond&& m_ObjRvalRef = MuniBond(5);

Смежные вопросы