- 1、本文档共100页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 群体类和群体数据的组织;目录;9.1.1 函数模板;*;求绝对值函数的模板分析;例9-1函数模板的示例;例9-1(续);例9-1(续);9.1.2 类模板;类模板的声明;例9-2 类模板示例;*;*;线性群体;群体的概念;9.2.1 线性群体的概念;9.2.2 直接访问群体——数组类;*;template class T ArrayT::Array(int sz) {//构造函数
assert(sz = 0);//sz为数组大小(元素个数),应当非负
size = sz; // 将元素个数赋值给变量size
list = new T [size]; //动态分配size个T类型的元素空间
}
template class T ArrayT::~Array() { //析构函数
delete [] list;
}
//拷贝构造函数
template class T ArrayT::Array(const ArrayT a) {
size = a.size; //从对象x取得数组大小,并赋值给当前对象的成员
//为对象申请内存并进行出错检查
list = new T[size]; // 动态分配n个T类型的元素空间
for (int i = 0; i size; i++) //从对象X复制数组元素到本对象
list[i] = a.list[i];
}
;//重载=运算符,将对象rhs赋值给本对象。实现对象之间的整体赋值
template class T
ArrayT ArrayT::operator = (const ArrayT rhs) {
if (rhs != this) {
//如果本对象中数组大小与rhs不同,则删除数组原有内存,然后重新分配
if (size != rhs.size) {
delete [] list; //删除数组原有内存
size = rhs.size; //设置本对象的数组大小
list = new T[size]; //重新分配n个元素的内存
}
//从对象X复制数组元素到本对象
for (int i = 0; i size; i++)
list[i] = rhs.list[i];
}
return *this; //返回当前对象的引用
};//重载下标运算符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能
template class T
T ArrayT::operator[] (int n) {
assert(n = 0 n size); //检查下标是否越界
return list[n]; //返回下标为n的数组元素
}
template class T
const T ArrayT::operator[] (int n) const {
assert(n = 0 n size); //检查下标是否越界
return list[n]; //返回下标为n的数组元素
}?
//重载指针转换运算符,将Array类的对象名转换为T类型的指???
template class T
ArrayT::operator T * () {
return list; //返回当前对象中私有数组的首地址
}
?;template class T
ArrayT::operator const T * () const {
return list; //返回当前对象中私有数组的首地址
}
//取当前数组的大小
template class T
int ArrayT::getSize() const {
return size;
}
// 将数组大小修改为sz
template class T
void ArrayT::resize(int sz) {
assert(sz = 0); //检查sz是否非负
if (sz == size) //如果指定的大小与原有大小一样,什么也不做
return;
T* newList = new T [sz]; //申请新的数组内存
int n = (sz size) ? sz : size;//将sz与size中较小的一个赋值给n
//将原有数组中前n个元素复制到新数组中
for (int i = 0; i n; i++)
newList[i] = list[i];
delete[] list; //删除原数组
list = newList; // 使list指向新数组
size = sz; //更新size
}
#endif //ARRAY_H
?;*;为什么有的函数返回引用;指针转换运算符的作用;Array类的应用;*
文档评论(0)