我试图编写一个变量值接口。基类只提供了一个枚举
字段,存储变量的类型(如int
、char
等),以及一些虚拟函数。
继承此接口的类应该实现每个变量类型的表示。
#include <iostream>
enum Type
{
INT, CHAR
};
class Var
{
Type type;
public:
Var(Type t):
type(t)
{}
virtual void printValue()
{
std::cout << "-\n";
}
virtual void printType()
{
std::cout << type << std::endl;
}
};
class IntVar : public Var
{
int value;
public:
IntVar(int i):
Var(INT),
value(i)
{}
void printValue()
{
std::cout << value << std::endl;
}
};
class CharVar : public Var
{
char value;
public:
CharVar(char c):
Var(CHAR),
value(c)
{}
void printValue()
{
std::cout << value << std::endl;
}
};
然后我尝试了这个:
Var* np = new IntVar(1);
np->printType();
np->printValue();
np = new CharVar('a');
np->printType();
np->printValue();
输出结果为
0(类型:INT)、1、1(类型:CHAR)、a
所以一切都按预期工作,但是当我尝试使用引用重复相同的操作时,结果有些奇怪。
Var& nr = *(new IntVar(1));
nr.printType();
nr.printValue();
nr = *(new CharVar('a'));
nr.printType();
nr.printValue();
这里的输出是
0(Type :: INT),1,1(Type :: CHAR)和1
为什么使用指针时代码可以运行,而使用引用时却无法运行?还是我忽略了一些明显的错误?
new
。你的程序存在内存泄漏。 - celticminstrel