您的位置:首页 > 其它

使用输出重载时发现的一个奇怪现象!!!

2005-11-13 23:15 393 查看
近日,使用重载输出时发现了一个奇怪现象,以下是我针对这个问题的简化程序:
//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(地址),也就是没有调用自己写的构造函数!
这是怎么解释呢?请高手指点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null 测试 struct class
相关文章推荐