嵌入式学习22(C++重载运算符 上)
来源:互联网 发布:西川贵教 知乎 编辑:程序博客网 时间:2024/06/06 03:16
1、 引入:运算符只能识别基本类型(整型,浮点型,字符类型),不能识别复杂类型
特点:
- 重载运算符时,不会改变运算的顺序。(操作数与被操作的顺序不会改变)
- 不会改变结合性。
- 不会改变运算的优先级(与C语言中运算符优先一致) 1+2+3+4 ia+ib+ic+id不会改运算符的特性。
- 如下运算是不能重载的: . -> sizoef :: ? : (已经在C++/C语言中明确作用)
2、知识储备:
友元函数:当某个函数需要访问某类的非公有成员(方法、属性)时,由于类的封装性,在类外不能访问可以将此函数声明为此类的类友函数时。函数在类外访问类所有信息。
注:优点:友元可以通过声明友元时,此函数访问所有成员
缺点:破坏封装性。
(+ - * /)返回一个新对象
(> < ==)返回bool
(<< )返回为了连续输出output
#include<iostream>#include<string.h>using namespace std;class mystring{public: mystring(); mystring(const char*); mystring(mystring&); ~mystring(); bool operator>(mystring& s); bool operator<(mystring& s); bool operator==(mystring& s); mystring& operator+(mystring& s); char operator[](int); friend ostream& operator<<(ostream& output,mystring& s);private: char *buf;};mystring::mystring():buf(NULL){}mystring::mystring(const char* s){ buf=new char[strlen(s)+1]; memcpy(buf,s,strlen(s)+1);}mystring::mystring(mystring& s){ /* buf=new char[sizeof(s.buf)]; //sizeof(指针)永远为4啊!! memcpy(buf,s.buf,sizeof(s.buf)); */ buf=new char[strlen(s.buf)+1]; memcpy(buf,s.buf,strlen(s.buf)+1);}mystring::~mystring(){ delete this->buf;}ostream& operator<<(ostream& output,mystring& s){ int i; for(i=0;i<strlen(s.buf);i++) output<<s.buf[i]; output<<endl; return output;}bool mystring::operator>(mystring& s){ if(strcmp(this->buf,s.buf)>0) return true; return false;}bool mystring::operator<(mystring& s){ if(strcmp(this->buf,s.buf)<0) return true; return false;}bool mystring::operator==(mystring& s){ if(strcmp(this->buf,s.buf)==0) return true; return false;}mystring& mystring::operator+(mystring& s)//得返回引用,不然和构造函数冲突{ //返回引用意味着不能连加 static mystring obj;//局部空间用完就释放了 obj.buf=new char[strlen(buf)+strlen(s.buf)+1];//先有空间再拷贝 memcpy(obj.buf,this->buf,strlen(this->buf)); memcpy(obj.buf+strlen(this->buf),s.buf,strlen(s.buf)+1); return obj;}char mystring::operator[](int index){ if(index>strlen(this->buf)-1) { cout<<"下标超出"<<endl; return 0; } return this->buf[index];}int main(){ mystring a("hello"); mystring b=a; mystring c("cmz"); mystring d=a+c; cout<<d[0]; return 0;}
阅读全文
0 0
- 嵌入式学习22(C++重载运算符 上)
- 【c++】运算符重载(上)
- 嵌入式学习23(C++重载运算符 下)
- 运算符重载(c++)
- 学习C++——运算符重载
- C++primer学习:重载运算符(3)
- C++primer学习:重载运算符(4)
- 重载赋值运算符(c/c++)
- 【十】运算符重载(上)
- C++之运算符重载(上)
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- POJ 3903-最长上升子序列
- HDU 1201-18岁生日(字符串)
- Scrapy元素选择器Xpath用法汇总
- MySql wait_timeout 配置
- Servlet---ServletResponse和ServletRequest(3)
- 嵌入式学习22(C++重载运算符 上)
- 小白成长记——Java基础之I/O流
- ThinkPad E550 连蓝牙耳机Jabra Clear
- ORACLE 自动备份并还原数据库
- 什么是 J2SE?
- webview
- 自定义的medialay+surface seekbar拖动不灵敏的问题
- C#中委托为什么类型安全
- 数据结构实验之二叉树的建立与遍历