近日,使用重载输出时发现了一个奇怪现象,以下是我针对这个问题的简化程序:
//Node.h//定义了一个节点类
#include<iostream>
using namespace std;
template<class elemType>
class Node{
public :
elemType data;
Node *pl;//指向左节点
Node *pr;//指向右节点
public:
Node()
{
pl=NULL;
pr=NULL;
}
~Node()
{
countNode--;
}
friend ostream &operator<<(ostream& out,const Node<elemType>* node)
{
out<<node->data;
return out;
}
};
//imfor.h 一个测试类
template<class elemType>
struct Imfor{
Node<elemType> *p;
Imfor(Node<elemType>* node)
{
p=node;
}
Imfor()
{
}
friend ostream &operator<<(ostream &out,const Imfor<elemType> *imfor){
out<<imfor->p
return out;
}
};
//test.cpp 测试主函数
void main()
{Imfor<int> imfo;
Node<int> node;
node.data=2;
imfo.p=&node;
cout<<&imfo;
}
这样便可以输出imfo->p->data及输出结果为2
但是将test.cpp改成下面的:
void main()
{Imfor<int> *imfo=new Imfor<int>;
Node<int> node;
node.data=2;
imfo->p=&node;
cout<<imfo;
}
就会输出imfo(地址),也就是没有调用自己写的构造函数!
这是怎么解释呢?请高手指点