类String的构造函数、析构函数和赋值函数
来源:互联网 发布:saber软件下载 编辑:程序博客网 时间:2024/04/30 14:54
1、代码如下:
注意:形参加上const修饰符,函数体里面判断参数是否为NULL,引用不能为空等。
复制操作符应该判断是否是自赋值。
重载输入操作符时,要注意给data分配足够的空间,现在还没有想到太好的办法,用的是临时变量,这里一直不是很明白C++中的(string s; cin>>s;)到底最大可以读取多少个字符,其原理又是怎么实现的呢。
友元函数有时候编译器会有bug,解决方法如下:事先声明类和友元函数(在类外面不能用friend 关键字)
class String;
ostream& operator<<(ostream& out,const String& s);
stream& operator>>(istream& in,const String& s);
bool operator<(const String& s1,const String &s2);
#include "stdafx.h"#include <iostream.h>#include <string.h>class String{public:String();String(const char *str);String(const String &s);~String();String& operator=(const String &str);friend ostream& operator<<(ostream& out,const String& s);friend istream& operator>>(istream& in,String& s);friend bool operator<(const String& s1,const String &s2);char& operator[](int pos){cout<<"index operator"<<endl;int len=strlen(data);if (pos>=len){return data[len-1];} else{return data[pos];}}private:char *data;};//默认构造函数String::String(){cout<<"default constructor"<<endl;data=new char[1];*data='\0';}//带参数构造函数String::String(const char *str){cout<<"parameter constructor"<<endl;if (str==NULL){data=new char[1];*data='\0';} else{int len=strlen(str);data=new char[len+1];strcpy(data,str);}}//复制构造函数String::String(const String &str){cout<<"copy constructor"<<endl;int len=strlen(str.data);data=new char[len+1];strcpy(data,str.data);}//析构函数String::~String(){cout<<"destructor"<<endl;delete[] data;}//赋值操作符String& String::operator=(const String &str){cout<<"assign operator"<<endl;if (this!=&str){int len=strlen(str.data);delete[] data;data=new char[len+1];strcpy(data,str.data);}return *this;}//输出操作符ostream& operator<<(ostream& out,const String& s){cout<<"cout operator"<<endl;out<<s.data<<endl;return out;}//输入操作符istream& operator>>(istream& in,String& s){cout<<"cin operator"<<endl;//这个地方很伤神,目前没有想到很好的办法,只能先用中间变量来获取输入的长度,然后释放中间变量char *sTemp=new char[1000];in>>sTemp;delete[] s.data;int len=strlen(sTemp);s.data=new char[len+1];strcpy(s.data,sTemp);delete[] sTemp;return in;}//比较操作符bool operator<(const String& s1,const String &s2){cout<<"compare operator"<<endl;if (strcmp(s1.data,s2.data)<0){return 1;}return 0;}void main(){String s1; //default constructorString s2("12345"); //parameter constructorString s3=s2; //copy constructors1=s2; //assign operatorcin>>s1; //输入操作符cout<<s1; //输出操作符 cout<<(s1<s2)<<endl; //比较操作符cout<<(s1[5])<<endl; //获取字符 //destructor destructor destructor}
- string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
- String 的构造函数、析构函数和赋值函数
- string的构造函数,析构函数和赋值函数
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
- String类的构造函数,析构函数,拷贝构造函数和赋值函数
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
- 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
- string类的构造函数、析构函数、拷贝构造函数和赋值函数
- 编写类String 的构造函数、拷贝构造函数、析构函数和赋值函数
- 写String类的普通构造函数,析构函数,拷贝构造函数和赋值函数
- 类String的构造函数,析构函数,赋值函数
- String的构造函数、析构函数和赋值数
- 网易游戏笔试题:编写string类的构造函数、拷贝构造函数、赋值构造函数和析构函数
- String的构造函数,拷贝构造函数、析构函数和赋值函数
- String构造函数,析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数,析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- TCP/IP 协议分析
- openkm配置
- 销售心理学1
- jqGrid显示数据,属性,多重表头,子表,行编辑,单元格编辑等 基本
- DOM对象和jquery对象之间的转化
- 类String的构造函数、析构函数和赋值函数
- Linux从动态库导出函数
- sql去重复
- HTTP为什么使用TCP
- 给初学者之一:浅谈java及应用
- 局域网频繁掉线解决办法
- Google上海如何测试搜索产品
- list contains
- ios 确认网络环境3G/WIFI,网络状态监测的总结