运算符重载
来源:互联网 发布:热血江湖sf源码 编辑:程序博客网 时间:2024/06/05 00:09
运算符重载
2016 6 21
this:每个对象默认有一个指针,指针指向了对象本身
a.print();
作用:1.成员变量和形参同名:this->x=x;
2.函数链 a.setx(10).sety(20).setRadius(30);
**static: c静态,c++(静态成员变量、静态成员函数)
c++中静态成员不属于 某个对象,内存中只有一份内存地址,属于整个类**
静态成员变量初始化:普通函数形式
int Circle::num=10;
**静态成员函数:静态函数只能调用、访问静态成员(变量。函数)
调用:Circle::静态成员函数名称**
friend:友元函数 友元类
可以直接访问私有成员
今天的内容
操作符重载:操作符操作自定义类型操作数(使用量不大)
**注意:
1.只能重载已经存在的操作符(+ - * /)
2、重载后操作数 数量不变(4+5)
3、至少有一个操作数是用户自定义类型 //int+ int error
4.重载后优先级不变**
operator:要重载的操作符是……
操作符重载两种形式:friend、 成员函数
如果函数实现在声明中完成,这个函数是一个内联函数(不要写过于复杂的语句 eg:if,代码不要过长,函数实现快,但增加内存使用
#include <iostream>using namespace std;class Point{public: //重载+/- friend Point operator+(const Point& p1,const Point& p2);//友元函数形式操作符重载 Point operator-(const Point& p1);//成员函数形式操作符重载 Point operator*(const Point& p1); Point operator/(const Point& p1); //如果函数实现在声明中完成,这个函数是一个内联函数(不要写过于复杂的语句 eg:if,代码不要过长,快,增加内存使用 Point(float _x,float _y){ x=_x; y=_y; } void print();private: float x; float y;};inline void Point::print(){ cout<<x<<endl; cout<<y<<endl;}Point operator+(const Point& p1,const Point& p2){ int x=p1.x+p2.x; int y=p1.y+p2.y; return Point(x, y);}//当一个对象作为成员函数的参数传递,在函数内是可以访问其私有成员的Point Point:: operator-(const Point& p1){ int x=p1.x-this->x; int y=p1.y-this->y; return Point(x, y);}Point Point:: operator*(const Point& p1){ int x=p1.x*this->x; int y=p1.y*this->y; return Point(x, y);}Point Point:: operator/(const Point& p1){ if(this->x==0||this->y==0){ exit(1);//程序异常退出 } int x=p1.x/this->x; int y=p1.y/this->y; return Point(x, y);}int main(int argc, const char * argv[]) { Point p1(2,4); Point p2(5,6); Point p3(0, 0); (p1+p2).print(); p1.operator-(p2).print(); //对象调用成员函数+ //p1.+(p2) (p1+p2).print(); (p1-p2).print(); (p3/p2).print(); (p3*p2).print(); return 0;}
[]、<<、>>、==、>、+=重载
#include <iostream>using namespace std;class Point{ /* ostream&:函数链 ostream& out:直接使用cout(out)? const Point &p:输出的对象 注意:输出输入运算符重载只能使用friend 第一个传递的是 */ friend ostream& operator<<(ostream& out,const Point &p); friend istream& operator>>(istream& in, Point &q); //重载+= </> == 课后习题 题库 大作业1 总结 friend Point operator+=( const Point& p1,const Point &p2); friend int operator>( const Point& p1,const Point &p2); friend int operator==( const Point& p1,const Point &p2);public: Point(float _x,float _y){ x=_x; y=_y; } float getx(); float gety(); void print();private: float x; float y;};//下标操作符重载只能用成员函数形式 (只能是成员函数形式运算符重载)class Text{public: //const对象进行调用 const int& operator[](int index)const{//[]自定义函数 return array[index]; //[]系统提供下标符 } //非const对象进行调用 int& operator[](int index){ return array[index]; } friend ostream& operator<<(ostream& out,const Text &t){ for(int i=0;i<4;i++) out<<t.array[i]<<endl; return out; }private: int array[20];};float Point:: getx(){ return x;}float Point:: gety(){ return y;}void Point:: print(){ cout<<x<<","<<y<<endl;}class Circle { friend ostream& operator<<(ostream& out,const Circle &c);public: Circle(float a,float b,float r); void print();private: Point p; float radius;};Circle::Circle(float a,float b,float r):p(a,b){ radius=r;}void Circle::print(){ cout<<radius<<endl;}ostream& operator<<(ostream& out,const Point &p){ out<<p.x<<endl;//直接调用p类中的输出操作符重载 out<<p.y<<endl; return out;}/*在point类的基础上写一个Circle类,使用组合,给Circle类添加输出操作符重载*/ostream& operator<<(ostream& out,const Circle &c){ out<<c.p<<endl; return out;}/*cin:输入操作符重载*/istream& operator>>(istream& in,Point &q){//注意:Point 前不用const否则会出错 in>> q.x; in>> q.y; return in;}Point operator+=( const Point& p1,const Point &p2){ float x=p1.x+p2.x; float y=p1.y+p2.y; return Point(x, y);}int operator>( const Point& p1,const Point &p2){ int n=0; if(((p1.x>p2.x)&&(p1.y>p2.y))||((p1.x>p2.x)&&(p1.y==p2.y))||((p1.x==p2.x)&&(p1.y>p2.y))) { n= 1;} else { n= 0;} return n;}int operator==( const Point& p1,const Point &p2){ int n; if((p1.x==p2.x)&&(p1.y==p2.y)) n=1; else n=0; return n;}int main(int argc, const char * argv[]) { Point p(3, 4); cout<<p<<endl; Circle c(1, 2, 3); cout<<c<<endl; float a; cin>>a; cout<<a<<endl; Text t; t[0]=100; t[1]=300; t[2]=400; cout<<t<<endl; Point p1(10,20); Point p2(5,6); (p1+=p2).print(); cout<<(p1>p2)<<endl; cout<<(p1==p2)<<endl;}
加减乘除运算符重载#include <iostream>using namespace std;class Point{public: //重载+/- friend Point operator+(const Point& p1,const Point& p2);//友元函数形式操作符重载 Point operator-(const Point& p1);//成员函数形式操作符重载 Point operator*(const Point& p1); Point operator/(const Point& p1); //如果函数实现在声明中完成,这个函数是一个内联函数(不要写过于复杂的语句 eg:if,代码不要过长,快,增加内存使用 Point(float _x,float _y){ x=_x; y=_y; } void print();private: float x; float y;};inline void Point::print(){ cout<<x<<endl; cout<<y<<endl;}Point operator+(const Point& p1,const Point& p2){ int x=p1.x+p2.x; int y=p1.y+p2.y; return Point(x, y);}//当一个对象作为成员函数的参数传递,在函数内是可以访问其私有成员的Point Point:: operator-(const Point& p1){ int x=p1.x-this->x; int y=p1.y-this->y; return Point(x, y);}Point Point:: operator*(const Point& p1){ int x=p1.x*this->x; int y=p1.y*this->y; return Point(x, y);}Point Point:: operator/(const Point& p1){ if(this->x==0||this->y==0){ exit(1);//程序异常退出 } int x=p1.x/this->x; int y=p1.y/this->y; return Point(x, y);}int main(int argc, const char * argv[]) { Point p1(2,4); Point p2(5,6); Point p3(0, 0); (p1+p2).print(); p1.operator-(p2).print(); //对象调用成员函数+ //p1.+(p2) (p1-p2).print(); (p3/p2).print(); return 0;}
0 0
- 运算符重载 [++,--,+,<<; &&,||(不可重载)]
- 重载之运算符重载
- 重载赋值运算符
- C++运算符重载
- 运算符重载
- 运算符重载总结
- 运算符重载例子
- 运算符重载
- 运算符重载
- 基础:运算符重载
- 运算符重载
- 运算符重载
- 重载赋值运算符
- C#运算符重载
- C++-运算符重载
- 重载赋值运算符
- 运算符重载
- 有关运算符重载
- 课堂感悟
- 一些题目总结
- Tomcat、http、get/post
- RxJava 学习笔记(二)
- iOS常用技巧
- 运算符重载
- 结构化数据,非结构化数据和关系型数据库(RDB)、非关系数据库的关系(Non-RDB)
- android调用系统相机,获取照片的适配性问题
- angularjs提示框及正则表达式校验
- c++ STL string一些总结
- DNS测试工具querperf
- 开启dblink的 oracle net trace与tracing --对dblink进行跟踪的方法
- hive 序列化serde
- 15.7节练习