标签:c++
运算符重载
性质:
1 不能创建新的操作符。
2 双目操作符“::”、“.”、和“.*”不能重载。
3 c++的操作符都是有优先级和结合性的,重载操作符后,其优先级和结合性是不会改变的。
4 原先的操作符是单目的,重载也是单目形式的;原先操作符是双目的,重载也是双目的,这是不能改变的。
5 操作符的重载只能针对自定义类型。即,在操作符定义的参数表中,至少有一个参数必须是自定义类型。
6 忌意义相左。
常成员函数
成员函数的操作,如果只对对象进行读操作,则该成员函数可以设计为常(const )成员函数。设计为常成员函数的好处是,让使用者一目了然地知道该成员函数不会改变对象值。同时让类的实现者更方便地调试,因为在常成员函数中,任何改变对象值的操作,都将被编译器毫不留情地认定为错误。
举例:矢量类的加法
#include<iostream> using namespace std; class Point{ private: int x, y; public: //成员函数 void set(int a, int b) { x=a, y=b; } //常成员函数 void print()const { cout<<"("<<x<<", "<<y<<")\n"; } //设置为友元函数以便访问私有成员 friend Point operator+(const Point& a, const Point& b); //设置为友元函数以便访问私有成员 friend Point add(const Point& a, const Point& b); }; Point operator+(const Point& a, const Point& b) { Point s; s.set(a.x+b.x, a.y+b.y); return s; } Point add(const Point& a, const Point& b) { Point s; s.set(a.x+b.x, a.y+b.y); return s; } int main() { Point a, b; a.set(3,1); b.set(4,5); //方法一 (a+b).print(); //方法二 operator+(a,b).print(); //方法三 add(a, b).print(); return 0; }
标签:c++
原文地址:http://blog.csdn.net/lsh_2013/article/details/45487273