Если, например, я создаю новый объект в функции и хочу вернуть его ссылку, как я могу это сделать?
Допустим, у меня есть IntClass, у которого есть поле 'int num' в частном порядке. Поэтому я хочу создать новый элемент IntClass в функции и вернуть ссылку на этот объект. Я пробовал что-то подобное, но это кажется незаконным (по какой-то причине, когда я делаю такую вещь, Binaries удаляется, когда я компилирую код, хотя я не получаю ошибок от самого компилятора (ECLIPSE):
IntClass* a = new IntClass(10);
IntClass &ref = *a;
return ref;
Есть идеи, как вернуть ссылку?
РЕДАКТИРОВАТЬ: разрешено "предполагать", что C ++ использует сборщик мусора
Поскольку большинству из вас непонятно, ПОЧЕМУ я "хочу" сделать это, вот полный вопрос:
Я получил этот файл (не сделан мной и не может быть отредактирован):
poly_subtype.h
#ifndef POLY_SUBTYPE_H
#define POLY_SUBTYPE_H
#include <iostream>
#include "cpu_add.h"
using std::cout;
using std::endl;
//Deriving classes definition
class IntClass;
class DoubleClass;
//The Virtual Number Class. IntClass and FloatClass will derive from this class.
class Number {
public:
//return a Number object that's the results of x+this, when x is DoubleClass
virtual Number& addDouble(DoubleClass& x) = 0;
//return a Number object that's the results of x+this, when x is IntClass
virtual Number& addInt(IntClass& x) = 0;
//return a Number object that's the results of x+this, when x is either
//IntClass or DoubleClass
virtual Number& operator+(Number& x) = 0;
//Print the number stored in the object
virtual void print_number() = 0;
};
class IntClass : public Number {
private:
int my_number;
public:
//Constructor
IntClass(int n):my_number(n) {}
//returns the number stored in the object
int get_number() {return my_number;}
//print the number stored in the object
void print_number() {cout << my_number << endl;}
//return a DoubleClass object that's the result of x+this
Number& addDouble(DoubleClass& x);
//return an IntClass object that's the result of x+this
Number& addInt(IntClass& x);
//return a Number object that's the result of x+this.
//The actual class of the returned object depends on x.
//If x is IntClass, then the result if IntClass.
//If x is DoubleClass, then the results is DoubleClass.
Number& operator+(Number& x);
};
class DoubleClass : public Number {
private:
double my_number;
public:
//Constructor
DoubleClass(double n):my_number(n) {}
//returns the number stored in the object
double get_number() {return my_number;}
//Print the number stored in the object
void print_number() {cout << my_number << endl;}
//return a DoubleClass object that's the result of x+this
Number& addDouble(DoubleClass& x);
//return a DoubleClass object that's the result of x+this
Number& addInt(IntClass& x);
//return a DoubleClass object that's the result of x+this.
//This should work if x is either IntClass or DoubleClass
Number& operator+( Number& x);
};
#endif
и у меня есть этот файл (опять же, не написанный мной и не редактируемый - говорит, что я могу использовать эти функции, но не оператор «+».
cpu_add.h:
#ifndef CPU_ADD_H
#define CPU_ADD_H
double add_double_double(double a, double b) {return (a+b);}
double add_int_double(int a, double b) {return ((double)(a)+b);}
int add_int_int(int a, int b) {return (a+b);}
#endif
Моя цель - реализовать следующие функции (их объявления и функциональность вы можете найти в poly_subtype.h выше):
Number& IntClass::addInt(IntClass& x);
Number& IntClass::addDouble(DoubleClass& x);
Number& IntClass::operator+(Number& x);
Number& DoubleClass::addInt(IntClass& x);
Number& DoubleClass::addDouble(DoubleClass& x);
Number& DoubleClass::operator+(Number& x);
Надеюсь, теперь стало понятнее.
Например, AddInt :
Number& IntClass::addInt(IntClass& x){
int num = add_int_int(my_number, x.get_number());
IntClass* a = new IntClass(num);
IntClass &ref = *a;
return ref;
}