c++模板类的知识,为什么下面程序要用结构体,把T data写在类里面不可以吗?看到好多地方这样写

2024-11-23 13:13:26
推荐回答(2个)
回答1:

这个与结构没有关系啦··
写成这样是想告诉读者,这个“类”是一个数碰碰正据结构,并且成员是公开访问的。
如果写成类的话就要写成
class Node
{
public:
T data;
...
};效果一样但没有上面那样整洁。
一般,我们把纯粹的数据结构类使用struct定义。而抽象出的具有行为的类定义为笑悔class。当然只是个习惯,或者说代码风格。或者技术约定。至于你究竟想怎样用,无所谓。
但是如果要写在linklist里,你也应该把整个结构:
class linklist
template
struct Node{
T data;
Node* next;
};
public:
...
};
这样。这样做不好的地方在于,我重写了一吵渗个list,具有环状结构。
class rolllist
{
Node* first;...

}
这时我就不得不重新写一个node结构。而且这个结果与linklist一样一样的。只不过操作有所不同。
如果要直接把T data放在list。你就会犯一个严重错误。
节点是节点,链表是链表,把两个属性放在一起,你觉得这是个啥?
首先搞清楚,链表与节点是聚合关系。
我们就可以得到关系 list=∑node。所以list ≠ node。不能放在一起!

回答2:

C++是在C语言上的枯枝扩展,它增加了一些新功能,但是完全兼容C语言,也就是说可以用C++ 的编译器来编译C语言的代码。struct在C语言里面属于自定义的数据类型,但是它不能像在C++里面一样增加成员函数之类面对对象特性的代码。但是在C++中,struct跟class几乎是一样的,他们都可以封装数据,以及操作数据的方法,也就是说,我认山如为哈,把上面代码中的struct用class进行替换也是可以的。
而且像union等关键字,在C++里面貌似也可增加成员函数(C++的特性),而它没唯敏封装的数据是共用同一段内存的(C的特性)。
希望对你有帮助。