C++ OOP (BigThree & Pass by Reference & Return by Reference & Point & Template)
来源:互联网 发布:matlab求协方差矩阵 编辑:程序博客网 时间:2024/05/18 03:32
template<typename Object>class Vector{ public: explicit Vector( int initSize = 0 ) //显示构造函数,不允许compiler进行自动类型转换 : theSize( initSize ), theCapacity( initSize + SPARE_CAPACITY ) //初始化列 { objects = new Object[theCapacity]; //通过指针动态分配内存生成数组 } Vector( const Vector& rhs ) : objects(NULL) { opreator= (rhs); } //拷贝构造函数(先将objects指针初始化为NULL) ~Vector() { delete [] objects; } //析构函数 /** *delete [] objects; *这里为什么要加“[]”,原因如下: *如果typename Object = Vector(或其他指针类型,如String、*p;甚至程序员自己开发的另一个指针类型的class),这样, *objects[i]里存储的含有指针变量或指针对象,指针指向其他内存的地址(可能这些地址是属于堆内存),避免这些内存无法收回造成内存泄漏, *所以加“[]”是最万无一失的方法,这样即使objects[i]里存储的都是指针对象并且都各自有动态分配的内存,delete [] objects可以通过调用 *objects[i]的析构函数来清理掉这些动态分配的内存。 * *假设 Object = int, 构造函数里就变成objects = new int[theCapacity]; 这样,objects就变成一个通过动态分配内存的整数数组了, *析构函数里就可以写成delete objects。 */ const Vector& operator= ( const Vector& rhs ) //拷贝赋值函数(const,传入的数组不能被修改,pass by reference; return by const reference) {//返回常量引用 if( this != &rhs) //自检,对于指针对象,不能自己给自己赋值,否则会出错 { delete [] objects; //清空原根据地 theSize = rhs.size(); theCapacity = rhs.thsCapacity; objects = new Object[ capacity() ]; //开辟新根据地 for( int k = 0; k < size(); k++ ) { objects[k] = rhs.objects[k]; } } return *this; //返回拷贝赋值后的对象 } void resize( int newSize ) //重置大小函数 { if( newSize > theCapacity ) { reserve( newSize * 2 + 1 ); //如果超过原数组容量,重新开辟新空间 } theSize = newSize; } void reserve( int newCapacity ) //开辟新根据地 { if( newCapacity < theSize ) //容量不能比已占空间小 { return; } Object *oldArray = objects; //把原根据地的地址告诉临时指针对象oldArray objects = new Object[ newCapacity ]; //原队伍领头人去开辟新根据地 for( int k = 0; k < theSize; k++) { objects[k] = oldArray[k]; //把原班人马转移到新根据地 } theCapacity = newCapacity; //记录新根据地容量 delete [] oldArray; //转移成功后放弃原根据地 } Object& operator[] ( int index ) //非常量成员函数 { return objects[ index ]; } const Object& operator[] (int index) const //常量成员函数 { return objects[ index ]; } bool empty() const //判断大小是否为空 { return size() == 0; } int size() const //获得大小 { return theSize; } int capacity() const //获得容量 { return theCapacity; } void push_back(const Object& x) //数组末尾添加对象 { if( theSize == theCapacity) //判断是否满容 { reserve( 2*theCapacity + 1); } objects[theSize++] = x; //先做操作,然后自增 } void pop_back() //弹出数组最后一个元素 { theSize--; } const Object& back() const //取出数组最后一个元素 { return objects[ theSize - 1 ]; } typedef Object * iterator; typedef const Object * const_iterator; //常量指针 iterator begin() { return &objects[0]; } const_iterator begin() const { return &objects[0]; } iterator end() { return &objects[ size() ]; } const_iterator end() const { return &objects[ size() ]; } enum { SPARE_CAPACITY = 16; }; private: int theSize; //大小 int theCapacity; //容量 Object *objects; //数组(指针) };
阅读全文
0 0
- C++ OOP (BigThree & Pass by Reference & Return by Reference & Point & Template)
- ruby pass by reference
- pass by reference demo
- 5.5 - Pass by Reference
- Pass by value & pass by reference
- pass by value & pass by reference
- pass by value vs pass by reference
- C++:pass by reference的时候真正传递的是什么?
- Effective C++:条款20:宁以 pass-by-reference-to-const替换pass-by-value
- effective c++:宁以pass-by-reference-to-const替代pass-by-value
- Effective C++--条款20:适当地用pass-by-reference-to-const代替pass-by-value
- 《Effect C++》学习------条款20 :宁以pass-by-reference-to-const替换pass-by-value
- 读书笔记《Effective C++》条款20:宁以pass-by-reference-to-const替换pass-by-value
- <Effective C++>:Item 20:以pass-by-reference-to-const替代pass-by-value .
- [effectiv c++]条款20:pass-by-reference-to-const 与 pass-by-value(解决slicing问题)
- pass by value 与pass by reference 小结
- [转]Does Java pass by reference or pass by value?
- 关于pass-by-reference-to-const和pass-by-value
- 用dubbo框架写的简单的接口作为客户端
- Spark性能优化——优化数据结构
- 2008 IIS 设置CDN内容过期时间
- 010Editor破解版下载-window、Mac、Linux
- 分田地
- C++ OOP (BigThree & Pass by Reference & Return by Reference & Point & Template)
- 什么是死锁及死锁的必要条件和解决方法
- JavaScript parseFloat() 函数
- SPOJ
- Gnuradio ABI ERROR(GR-UHD detected ABI compatibility mismatch with UHD library) 解决办法!
- 有限状态机嵌入式系统
- oracle数据导出与导入
- vs2015安装过程
- 第一章 Java Web工作原理