新手急问:C++模板程序问题,急盼回复!!!
作为新手,对于模板类的使用不是很熟。在看到一段代码时,出现了问题。代码:
///////////////////////////////
class Creator
{
public:
Creator() { i=1; }
public:
int i;
};
template <class T> class SOCmnPointer
{
public:
// constructors
SOCmnPointer(void) { p = NULL; }
SOCmnPointer(T* p_) { p = p_; }
public:
T* p;
}; // SOCmnPointer
int main(int argc, _TCHAR* argv[])
{
SOCmnPointer<Creator> creator = new Creator();
printf("creator=%d creator.p=%d \n",creator,creator.p);
return 0;
}
问题1:不知道main函数中“ SOCmnPointer<Creator> creator = new Creator(); ”这句话什么意思,知道SOCmnPointer<Creator> creator 是声明一个模板类实例,但赋值就不明白了,等号左边是一个类,右边是一个指针,地位不对等啊。
我的理解1:假如声明了一个类class L,上面那句话相当于 L l=new L();这样明显不对呀,应该 L* l=new L(); 才对嘛。
我的理解2:由于类对象所占有的内存实际上是其成员变量占有的内存和,但此处只有一个成员变量,而且为指向T的指针,所以new Creator()后的指针赋给SOCmnPointer<Creator> creator 后(这里也和上面一样有疑惑,应该SOCmnPointer<Creator> *creator才对嘛)也就等于赋给了creator.p
我的理解3:SOCmnPointer<Creator> creator = new Creator(); 相当于 SOCmnPointer<Creator> creator( new Creator()); 这样模板类调用构造函数 SOCmnPointer(T* p_) { p = p_; } 将新得到的指针赋给creator.p
我对这些概念比较混淆,可能上面的理解没有一种是对的,我总感觉都有问题,忘各位高人指点一二,不胜感激。
问题2:将上面的程序小改一下,即模板类的成员变量类型仍然为指针,只不过是指向整型的,结果就编译出错,不知为什么?
///////////////////////////////
class Creator
{
public:
Creator() { i=1; }
public:
int i;
};
template <class T> class SOCmnPointer
{
public:
// constructors
SOCmnPointer(void) { p = NULL; }
SOCmnPointer(T* p_) { p = p_; }
public:
int* p;
}; // SOCmnPointer
int main(int argc, _TCHAR* argv[])
{
SOCmnPointer<Creator> creator = new int*;//等同于new Creator()返回一指针
printf("creator=%d creator.p=%d \n",creator,creator.p);
return 0;
}
当然你可以说两个构造函数里的赋值存在指针类型转换问题,问题不在这里,删掉构造函数一样编译不过,把“ new int* ”换成
“ new int ”也通不过。
查了钱能的《C++程序设计教程》里面模板讲得很少,也没能解决。另外,问题写的不是很清晰,代码也比较乱,麻烦大家了,帮我这个连概念都不是很清楚的新手讲解讲解,在此谢过!!!!!!!!