たとえば、関数内に新しいオブジェクトを作成し、その参照を返すにはどうしたらいいですか?C++で参照を返す方法
私は、プライベートに 'int num'フィールドを持つIntClassがあるとします。だから私は、関数内のIntClassの新しい要素を作成し、そのオブジェクトの参照を返したいと思います。私はそのような何かをしようとしましたが、私は、私は、コンパイラ自体(ECLIPSE)からエラーを取得していないが、私は、コードをコンパイルするときにバイナリが削除されるようなことを行うときには、いくつかの理由から(違法と思われる:
IntClass* a = new IntClass(10);
IntClass &ref = *a;
return ref;
どれをその後、参照を返すためにどのようなアイデア
EDIT:?それはそうここにそれを行うには、私が「欲しい」なぜそれがあなたのほとんどに明確ではないとしてC++にはガベージコレクション
を使用していること「を前提と」することができますされ完全な質問:
私はこのファイルを持っています(Not maデ・私が、編集することはできません):
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:
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);
:私の目標は、(あなたが上記のpoly_subtype.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
私はそれが今より明らかであることを願っています。例えば
、 いる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;
}
C++は、Eclipseは、コンパイラではありませんちなみにガベージコレクション – user550413
を使用していること「を前提と」することができます。それはIDEです:) – UmmaGumma
IntClassを参照渡ししてみませんか? void f(IntClass&ref) – anno