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

近日,使用重载输出时发现了一个奇怪现象,以下是我针对这个问题的简化程序:

//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(地址),也就是没有调用自己写的构造函数!

这是怎么解释呢?请高手指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值