我試圖爲變量值編寫接口。基類僅提供一個enum
字段,其中存儲變量的類型(如int
,char
等)和一些虛擬函數。 繼承此接口的類應該分別實現變量類型的表示。參考和指向接口的指針之間的C++不同行爲
#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),一個
所以一切都按預期工作,但是當我用相同的參考文獻嘗試時,結果有點奇怪。
Var& nr = *(new IntVar(1));
nr.printType();
nr.printValue();
nr = *(new CharVar('a'));
nr.printType();
nr.printValue();
在這裏,產量
0(類型:: INT),1,1(類型:: CHAR)和
爲什麼代碼工作,何時使用指針並且不能與引用一起工作?或者我忽略了一些明顯的錯誤?
您正在使用'new'錯誤。你的程序有內存泄漏。 – celticminstrel