C++中的函数重载和运算符重载(有很多实例)

 时间:2020-09-22  贡献者:qhca.net

导读:c 实验21 运算符重载.doc,C++之重载运算符和重载函数前言: 第一部分:基本概念的介绍 第二部分:c++之重载函数 第三部分:c++之重载运算符。 第四部分:实例详解。第一部分:基本概念介绍C++ 允许在同一

c  实验21 运算符重载.doc
c 实验21 运算符重载.doc

C++之重载运算符和重载函数前言: 第一部分:基本概念的介绍 第二部分:c++之重载函数 第三部分:c++之重载运算符。

第四部分:实例详解。

第一部分:基本概念介绍C++ 允许在同一作用域中的某个函数和运算符指定多个定义, 分别称为函数重载和运算符 重载。

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明, 但是 它们的参数列表和定义(实现)不相同。

当您调用一个重载函数或重载运算符时, 编译器通过把您所使用的参数类型与定义中的参数 类型进行比较,决定选用最合适的定义。

选择最合适的重载函数或重载运算符的过程,称为 重载决策。

第二部分:c++之重载函数在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指 参数的个数、类型或者顺序)必须不同。

您不能仅通过返回类型的不同来重载函数。

下面的实例中,同名函数 print() 被用于输出不同的数据类型:

#include using namespace std; class printData { public: void print(int i) { cout << "整数为: " << i << endl; } void print(double f) { cout << "浮点数为: " << f << endl; } void print(char c[]) { cout << "字符串为: " << c << endl; } }; int main(void) { printData pd; // 输出整数 pd.print(5); // 输出浮点数 pd.print(500.263); // 输出字符串 char c[] = "Hello C++"; pd.print(c); return 0; }输出结果: 整数为: 5 浮点数为: 500.263 字符串为: Hello C++

第三部分:运算符重载您可以重定义或重载大部分 C++ 内置的运算符。

这样, 您就能使用自定义类型的运算符。

重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算 符符号构成的。

与其他函数一样,重载运算符有一个返回类型和一个参数列表。

Box operator+(const Box&); 声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。

大多数的重载运算符 可被定义为普通的非成员函数或者被定义为类成员函数。

如果我们定义上面的函数为类的非 成员函数,那么我们需要为每次操作传递两个参数,如下所示: Box operator+(const Box&, const Box&);下面的实例使用成员函数演示了运算符重载的概念。

在这里,对象作为参数进行传递,对象 的属性使用 this 运算符进行访问,如下所示:#include using namespace std; class Box { public: double getVolume(void) { return length * breadth * height; } void setLength( double len ) { length = len; } void setBreadth( double bre ) { breadth = bre; } void setHeight( double hei )

{ height = hei; } // 重载 + 运算符,用于把两个 Box 对象相加 Box operator+(const Box& b) { Box box; box.length = this->length + b.length; box.breadth = this->breadth + b.breadth; box.height = this->height + b.height; return box; } private: double length; // 长度 double breadth; // 宽度 double height; // 高度 }; // 程序的主函数 int main( ) { Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box Box Box3; // 声明 Box3,类型为 Box double volume = 0.0; // 把体积存储在该变量中 // Box1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // Box2 详述 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // Box1 的体积 volume = Box1.getVolume(); cout << "Volume of Box1 : " << volume <

Box3 = Box1 + Box2; // Box3 的体积 volume = Box3.getVolume(); cout << "Volume of Box3 : " << volume < (大于>,<=(小于等 于),>=(大于等于) 逻辑运算符 ||(逻辑或),&&(逻辑与),!(逻辑非) 单目运算符 + (正),-(负),*(指针),&(取地址) 自增自减运算符 ++(自增),--(自减) 位运算符 | (按位或), & (按位与), ~(按位取反), ^(按位异或),, << (左 移),>>(右移) 赋值运算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= 空间申请与释放 new, delete, new[ ] , delete[] 其他运算符 ()(函数调用),->(成员访问),,(逗号),[](下标) 下面是不可重载的运算符列表: . 成员访问运算符 .*, ->* 成员指针访问运算符 :: 域运算符 sizeof 长度运算符 ?: 条件运算符 # 预处理符号第四部分:相关实例一:一元运算符重载 一元运算符只对一个操作数进行操作,下面是一元运算符的实例: 递增运算符( ++ )和递减运算符( -- )

一元减运算符,即负号( - ) 逻辑非运算符( ! ) 一元运算符通常出现在它们所操作的对象的左边,比如 !obj、-obj 和 ++obj,但有时它 们也可以作为后缀,比如 obj++ 或 obj--。

下面的实例演示了如何重载一元减运算符( - )。

#include using namespace std; class Distance { private: int feet; int inches; public: // 所需的构造函数 Distance(){ feet = 0; inches = 0; } Distance(int f, int i){ feet = f; inches = i; } // 显示距离的方法 void displayDistance() { cout << "F: " << feet << " I:" << inches <

-D2; // 取相反数 D2.displayDistance(); // 距离 D2 return 0; }输出结果 F: -11 I:-10 F: 5 I:-11二:二元运算符重载 二元运算符需要两个参数,下面是二元运算符的实例。

我们平常使用的加运算符( + )、 减运算符( - )、乘运算符( * )和除运算符( / )都属于二元运算符。

就像加(+)运 算符。

下面的实例演示了如何重载加运算符( + )。

类似地,您也可以尝试重载减运算符( - ) 和除运算符( / )。

#include using namespace std; class Box { double length; double breadth; double height; public: double getVolume(void) { return length * breadth * height; } void setLength( double len ) { length = len; } void setBreadth( double bre )// 长度 // 宽度 // 高度

{ breadth = bre; } void setHeight( double hei ) { height = hei; } // 重载 + 运算符,用于把两个 Box 对象相加 Box operator+(const Box& b) { Box box; box.length = this->length + b.length; box.breadth = this->breadth + b.breadth; box.height = this->height + b.height; return box; } }; // 程序的主函数 int main( ) { Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box Box Box3; // 声明 Box3,类型为 Box double volume = 0.0; // 把体积存储在该变量中 // Box1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // Box2 详述 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // Box1 的体积 volume = Box1.getVolume(); cout << "Volume of Box1 : " << volume <

// 把两个对象相加,得到 Box3 Box3 = Box1 + Box2; // Box3 的体积 volume = Box3.getVolume(); cout << "Volume of Box3 : " << volume <

#include using namespace std; class A { private: int a; public: A(); A(int n); A operator+(const A & obj); A operator+(const int b); friend A operator+(const int b, A obj); void display(); }; A::A() { a=0; } A::A(int n)//构造函数 { a=n;

} A A::operator +(const A& obj)//重载+号用于 对象相加 { return this->a+obj.a; } A A::operator+(const int b)//重载+号用于 对象与数相加 { return A(a+b); } A operator+(const int b, A obj) { return obj+b;//友元函数调用第二个重载+的成员函数 相当于 obj.operator+(b); } void A::display() { cout<

a4.display(); a5=m+a1; a5.display(); } 输出结果: 1 2 3 2 2

注意事项 2: 对实例改写:以非成员函数的方式重载运算符 +#include using namespace std; class Box { double length; double breadth; double height; public: double getVolume(void) { return length * breadth * height; } void setLength( double len ) { length = len; } void setBreadth( double bre ) { breadth = bre; } void setHeight( double hei ) { height = hei; } /** * 改写部分 2018.09.05 * 重载 + 运算符,用于把两个 Box 对象相加 * 因为其是全局函数,对应的参数个数为 2。

* 当重载的运算符函数是全局函数时,需要在类中将该函数声明为友员。

*/ friend Box operator+(const Box& a, const Box& b);// 长度 // 宽度 // 高度

}; Box operator+(const Box& a, const Box& b) { Box box; box.length = a.length + b.length; box.breadth = a.breadth + b.breadth; box.height = a.height + b.height; // cout << box.length << "--" << box.breadth << "--" << box.height << endl; return box; } // 程序的主函数 int main( ) { Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box Box Box3; // 声明 Box3,类型为 Box double volume = 0.0; // 把体积存储在该变量中 // Box1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // Box2 详述 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // Box1 的体积 volume = Box1.getVolume(); cout << "Volume of Box1 : " << volume <

return 0; }三:关系运算符重载 C++ 语言支持各种关系运算符( < 、 > 、 <= 、 >= 、 == 等等),它们可用于 比较 C++ 内置的数据类型。

您可以重载任何一个关系运算符,重载后的关系运算符可用于比较类的对象。

下面的实例演示了如何重载 < 运算符,类似地,您也可以尝试重载其他的关系运算符。

#include using namespace std; class Distance { private: int feet; int inches; public: // 所需的构造函数 Distance(){ feet = 0; inches = 0; } Distance(int f, int i){ feet = f; inches = i; } // 显示距离的方法 void displayDistance() { cout << "F: " << feet << " I:" << inches <

 
 

微信扫一扫 送福利