算法学习日记
来源:互联网 发布:洛阳软件培训班 编辑:程序博客网 时间:2024/06/05 08:12
看来还是功底不行,编程的时候遇到了如下麻烦
(1)在写拷贝构造函数的时候,有个疑问:拷贝构造函数的参数是直接使用当前类的私有成员,这样可以吗?查书之后理解了,类的私有成员是针对其他调用这个类的代码所定义的,同一个类的不同对象之间可以互相调用私有成员.
(2)写1维数组类的时候有如下问题,见源码的注释
#include<iostream>using namespace std;class BadInitliazer{public: BadInitliazer();};class OutOfBonds{public: OutOfBonds();};template<class T>class Array1D{public: ArrayID(int sz,int *a); //构造函数,默认参数为0 ArrayID(const Array1D<T> &x); //赋值构造函数 ~Array1D{delete [] element}; T& operator[](int i)const; int Size(){return size}; Array1D<T>& operator=(const Array1D<T> &v); //注意返回值类型,像赋值这种改变当前对象的就用引用类型。像重载加法之类的就返回自定义的对象类型就可以了。 //Array1D<T> operator+()const; Array1D<T> operator+(const Array1D<T> &v)const; //重载运算符,特别是类里面的,如果返回值是引用类型,都是返回*this(可能算是个技巧) Array1D<T> operator-()const; Array1D<T> operator-(const Array1D<T> &v)const;//Array1D<T> operator*(const Array1D<T> &v)const; Array1D<T>& operator+=(const T& x);private: int size_1; T *element;};template<class T> //构造函数Array1D<T>::Array1D(int sz,T *a){ if(sz<1) throw BadInitliazer(); else { size_1=sz; element=new T [sz]; for(int i=0;i<size_1;i++) { element[i]=a[i]; } }}template<class T> //拷贝构造函数Array1D<T>::Array1D(const Array1D<T> &x){ int i=0; size_1=x.size_1; element=new T [size_1]; for(i=0;i<size_1;i++) { element[i]=x.element[i]; }}template<class T>T& Array1D<T>::operator[](int i) const{ if(i<0 || i>size_1) { throw OutOfBonds(); } else { return element[i]; }}template<class T>Array1D<T>& Array1D<T>::operator=(const Array1D<T> &v){ int i=0; if(*thils!=v) { size_1=v.size_1; delete [] element; element=new T[size_1]; for(i=0;i<sie_1;i++) { element[i]=v.element[i]; } } return *this;}template<class T>Array1D<T> Array1D<T>::operator+(const Array1D<T>& v) const{ if(size_1!=v.size_1()) throw SizeUnMatch(); Array1D<T> w(size_1); else { for(i=0;i<size_1;i++) { w.element[i]=element[i]+v.element[i]; } return w; }}template<class T>Array1D<T> Array1D<T>::operator-(const Array1D<T>& v) const{ if(size_1!=v.size_1()) throw SizeUnMatch(); Array1D<T> w(size_1); else { for(i=0;i<size_1;i++) { w.element[i]=element[i]-v.element[i]; } return w; }}template<class T>Array1D<T> Array1D<T>::operator-(){ Array1D<T> w(size_1); else { for(i=0;i<size_1;i++) { w.element[i]=-element[i]; } return w; }}template<class T>Array1D<T>& Array1D<T>::operator+=(const T&x){ int i=0; for(i=0;i<size_t;i++) { element[i]+=x; } return *this;}int main(){ int a[3]={1,2,3}; Array1D<int> array_1(3,a);}
0 0
- 算法学习日记
- 算法学习日记--最大公约数问题
- 算法学习日记 字典法排序
- 算法学习日记----栈的编辑
- 算法学习日记--蚂蚁爬杆
- C++学习日记/4类排序算法
- 算法学习日记 火车站出站问题序排列算法。
- 算法学习日记 -----链表以及箱子排序算法
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 学习日记
- 【学习日记】
- 学习日记
- 学习日记
- 微信公众号消息text换行问题
- Git 使用说明
- 低版本升级HANA到SPS8及以上之前要处理的问题
- Linux系统裁剪(3)之动态增加Linux模块
- p2p打洞原理
- 算法学习日记
- Flatten Binary Tree to Linked List
- CentOS 6.2编译安装MySQL 5.5.25
- Android客户端与服务器端通过DES加密认证
- ExpandListview应用(实现二级列表和实现新闻分类)
- cookie:记住用户登录时的用户名
- android序列化Serializable、Parcelable(一)
- WCF配置文件详解
- Service的总结及使用技巧(需要注册)