我在c++中有这个程序。
ref2.h:
#ifndef REF2_H
#define REF2_H
#include <iostream>
using std::cout;
using std::endl;
int add_int_int(int a, int b) {return (a+b);}
class IntClass;
class Number {
public:
//return a Number object that's the results of x+this, when x is IntClass
virtual Number& addInt(IntClass& 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;}
Number& addInt(IntClass& x);
}
Number& IntClass::addInt(IntClass& x)
{
int n = add_int_int(my_number, x.get_number());
IntClass elem = IntClass(n);
IntClass &ref = elem;
return ref;
}
#endiftest.cpp
#include "ref2.h"
#include <iostream>
using std::cout;
using std::endl;
int main() {
cout << "Testing subtyping polymorphism:" << endl;
IntClass ia(1);
IntClass ib(2);
Number& num = ia.addInt(ib); num.print_number(); //should be: 3
}我没有发现我的错误。有没有人能帮我?
发布于 2011-01-07 07:24:28
您将在addInt()中返回一个对局部变量的引用。别干那事。编译器应该已经警告过你了。
发布于 2011-01-07 07:29:31
返回对数字的引用的概念(在这种情况下)是有缺陷的。把引用想象成一个指针。addInt函数在堆栈上分配一个新的IntClass对象,然后返回对它的引用。
当函数返回时,IntClass的内存被释放,因此引用指向垃圾。
您应该返回一个指向数字(数字*)的指针,并且需要使用new IntClass来创建一个数字。然后,当您使用完它时,还需要在它上调用delete。
发布于 2011-01-07 07:23:37
当addInt()返回时,您返回的是对本地对象的引用,该对象超出了范围:
IntClass elem = IntClass(n);
IntClass &ref = elem;
return ref; https://stackoverflow.com/questions/4621060
复制相似问题