• 第十八章 33用重载输出运算符函数实现字符串的输出 简单


    // 33用重载输出运算符函数实现字符串的输出
    /*#include <iostream>
    using namespace std;
    class String
    {
    public:
    	String(); //默认的构造函数
    	String(const char*const ch); //构造带值的string
    	int getlen()const { return len;}   //读取长度
    	//const char *getstr()const{ return str;} //读取字符串
    
    	//重载输出函数
    	friend ostream&operator<<(ostream &o, const String &s)
    	{
    		o<<s.str;
    		return o;
    	}
    
    
    	//这里是可以修改的
    	char &operator[](unsigned short int  length);
    	char  operator[](unsigned short int  length)const;
    
    	//复制构造函数
    	String (const String&r);
    
    	//重载赋值运算符=
    	String &operator=(const String &s);
    	
    
    private:
    	unsigned short int len;
    	char *str;
    };
    //创建一个空的str变量
    String::String()
    {
        len = 0;
    	str = new char[1];
    	str[0] = '\0';
    };
    String::String(const char*const ch)
    {
    	cout<<"带一个参数的构造函数"<<endl;
    	len = strlen(ch);
    	str = new char[len+1];
    	for(int i=0; i<len; i++){
    	   str[i] = ch[i];
    	}
    	str[len] = '\0';
    };
    
    char & String::operator[](unsigned short int length)
    {
    	    if(length > len){
    		   return str[len-1]; //返回可见字符的值
    		}else{
    		   return str[length];
    		}
    };
    
    char String::operator[](unsigned short int length)const
    {
    	    cout<<"下标运算符const执行"<<endl;
    		if(length > len){
    		   return str[len-1]; //返回可见字符的值
    		}else{
    		   return str[length];
    		}
    };
    
    String::String (const String&rs)
    {
    	len = rs.getlen();
    	str = new char[len+1];
    	for(int i=0; i<len; i++){
    	    str[i] = rs[i]; 
    		//这里因为我们构造一个新对象并且用旧对象来为它赋值,很明显,不会修改旧对象的值,所以旧对象rs在调用operator[]const函数的时候,不用将指定字符串的地址返回,只需要要按值返回这个字符即可
    		//第二次重载的operator[]运算符函数,按值返回的一个字符,同时在函数体前面加了一个const
    		//表示该函数可以操作const对象,也就是rs
    		//这样由于2个同名的函数,它的类型不同,一个可操作const对象,一个不可以,这样就可以做到了对函数的重载
    	}
    	str[len]='\0';
    	cout<<"复制构造函数完成:"<<str<<endl;
    
    };
    
    String& String::operator=(const String &s)
    {
    	cout<<"operator=执行"<<endl;
    	if(this == &s)
    	{
    	    return *this;
    	}else{
    	    delete []str; //删除左边的字符串
    		len = s.getlen();
    		str = new char[len+1];
    		for(int i=0; i<len; i++){
    		    str[i] = s[i];
    		}
    		str[len] = '\0';
    	}
    	return *this; //注意按引用返回,也就是别名
    }
    
    int main()
    {
    	String s1("hello"), s2("name");
    	s1 = "name";
    	String s3="Xlc";
    	s1 = s2 = s3;
    	cout<<"s1:"<<s1<<endl;
    	cout<<"s2:"<<s2<<endl;
        cout<<"s3:"<<s3<<endl;
        return 0;
    }*/
    

      

  • 相关阅读:
    小程序实现删除列表某条内容的功能
    关于多行文本 textarea 在ios 真机上padding相对安卓较大问题
    关于小程序 input 组件内容显示不全(显示的长度不满 input 宽度)问题
    关于小程序button控件上下边框的显示和隐藏问题
    关于微信小程序 textarea组件在fixed定位的模块中随页面移动问题
    首记
    java >>> 和 >>>=的区别
    Nginx" upstream prematurely closed connection while reading response header from upstream"问题排查
    nginx配置rewrite总结
    nginx配置location总结
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2700768.html
Copyright © 2020-2023  润新知