ep6_3.cpp
上传用户:wxcui2006
上传日期:2022-07-12
资源大小:1274k
文件大小:2k
- /*6.3 使用自定义字符串类,编写求数组元素中最大值的函数模板。*/
- //使用独立的函数模板
- #include<iostream>
- using namespace std;
- const int n=256;
- class mystring{//为简单只保留用到的函数
- char str[n]; //存放字符串的数组容器
- int maxsize; //最大可用元素数,可防止数组出界,提高健壮性
- int last; //已用元素数
- public:
- mystring(){
- last=0;
- maxsize=n;
- str[0]=' ';
- cout<<"缺省构造函数"<<endl;
- }
- mystring(char *s){//当C字符串过长,初始化时采用截尾处理
- last=-1;
- maxsize=n;
- do{
- last++;
- str[last]=s[last];
- }while(s[last]!=' '&&last<maxsize-1);
- str[last] =' '; //截尾处理时,必须加串结束符
- cout<<"构造函数"<<endl;
- }
- mystring(mystring & ms){
- last=-1;
- maxsize=n;
- do{
- last++;
- str[last]=ms.str[last];
- }while(last<ms.last);
- cout<<"拷贝构造函数"<<endl;
- }
- ~mystring(){
- cout<<"析构函数"<<endl;
- }
- void show(){//如需重载<<,则请参见9.3节,暂时未学到,替代的方法是改用一个show()函数
- cout<<str<<endl;
- }
- mystring & operator=(char * ms);//这里重载的=是把C风格字符串赋给mystring
- mystring& operator=(mystring &);
- bool operator<(mystring &);
- };
- mystring & mystring::operator=(char* ms){ //用C字符串赋值自定义字符串
- last=-1;
- do{
- last++;
- str[last]=ms[last];
- }while(ms[last]!=' '&&last<maxsize-1);
- str[last] =' '; //截尾处理时,必须加串结束符
- return *this;
- }//这里返回值为引用,不调用拷贝构造函数
- mystring& mystring::operator=(mystring & ms){
- last=-1;
- do{
- last++;
- str[last]=ms.str[last];
- }while(last<ms.last);
- cout<<"赋值函数"<<endl;
- return *this;
- }
- bool mystring::operator<(mystring & ms){
- int i=0,k;
- do{
- k=str[i]-ms.str[i];
- i++;
- }while(k==0&&i<last&&i<ms.last);
- if(k<0) return true;
- if(i==last&&i!=ms.last) return true;
- return false;
- }
- template <typename Groap>Groap max(Groap *r_array,int size){//这里是一个独立的函数模板
- Groap max_val=r_array[0];
- for (int i=1;i<size; ++i) if(max_val<r_array[i]) max_val=r_array[i];
- return max_val;
- }
- int main(){
- int i;
- char sp[6][10]={"南京大学","东南大学","交通大学","清华大学","天津大学","复旦大学"};
- mystring ms[6];// 对象数组
- for(i=0;i<6;i++) ms[i]=sp[i];
- cout<<"打印学校名称:"<<endl;
- for(i=0;i<6;i++) ms[i].show();
- cout<<"按字典序查找校名:"<<endl;
- (max<mystring>(ms,6)).show();
- return 0;
- }