第8章 操作符重载
- 格式:ppt
- 大小:104.50 KB
- 文档页数:18
第八章多态1.单选题(1).下列关于运算符重载的描述中,( D )是正确的。
(A) 可以改变参与运算的操作数个数 (B) 可以改变运算符原来的优先级(C) 可以改变运算符原来的结合性(D) 不能改变原运算符的语义(2).下列函数中,不能重载运算符的函数是( b )。
(A) 成员函数(B) 构造函数(C) 普通函数 (D) 友员函数(3).要求用成员函数重载的运算符是( A )。
(A) =(B) == (C) <= (D) ++(4).要求用友员函数重载的运算符是( C )。
(A) = (B) [] (C) <<(D) ()(5).在C++中,要实现动态联编,必须使用( D )调用虚函数。
(A) 类名(B) 派生类指针(C) 对象名(D) 基类指针(6).下列函数中,不能说明为虚函数的是( C )。
(A) 私有成员函数(B) 公有成员函数(C) 构造函数(D) 析构函数(7).在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( A )。
(A) 相同(B)不同(C) 相容(D) 部分相同(8).C++中,根据(D )识别类层次中不同类定义的虚函数版本。
(A) 参数个数(B) 参数类型(C) 函数名(D) this指针类型(9).虚析构函数的作用是(C )。
(A) 虚基类必须定义虚析构函数(B) 类对象作用域结束时释放资源(C)delete动态对象时释放资源(D) 无意义(10).下面函数原型中,( B )声明了fun为纯虚函数。
(A) void fun()=0; (B) virtual void fun()=0;(C) virtual void fun(); (D) virtual void fun(){ };(11).若一个类中含有纯虚函数,则该类称为( C )。
(A) 基类(B)纯基类(C) 抽象类(D) 派生类(12).假设Aclass为抽象类,下列正确的说明语句是( B )。
C++operator关键字(重载操作符)operator是C++的关键字,它和运算符⼀起使⽤,表⽰⼀个运算符函数,理解时应将operator=整体上视为⼀个函数名。
这是C++扩展运算符功能的⽅法,虽然样⼦古怪,但也可以理解:⼀⽅⾯要使运算符的使⽤⽅法与其原来⼀致,另⼀⽅⾯扩展其功能只能通过函数的⽅式(c++中,“功能”都是由函数实现的)。
⼀、为什么使⽤操作符重载?对于系统的所有操作符,⼀般情况下,只⽀持基本数据类型和标准库中提供的class,对于⽤户⾃⼰定义的class,如果想⽀持基本操作,⽐如⽐较⼤⼩,判断是否相等,等等,则需要⽤户⾃⼰来定义关于这个操作符的具体实现。
⽐如,判断两个⼈是否⼀样⼤,我们默认的规则是按照其年龄来⽐较,所以,在设计person 这个class的时候,我们需要考虑操作符==,⽽且,根据刚才的分析,⽐较的依据应该是age。
那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了⽤户定义的数据类型class,所以,需要⽤户⾃⼰来提供该参数版本的实现。
⼆、如何声明⼀个重载的操作符?A: 操作符重载实现为类成员函数重载的操作符在类体中被声明,声明⽅式如同普通成员函数⼀样,只不过他的名字包含关键字operator,以及紧跟其后的⼀个c++预定义的操作符。
可以⽤如下的⽅式来声明⼀个预定义的==操作符:class person{private:int age;public:person(int a){this->age=a;}inline bool operator == (const person &ps) const;};实现⽅式如下:inline bool person::operator==(const person &ps) const{if (this->age==ps.age)return true;return false;}调⽤⽅式如下:#includeusing namespace std;int main(){person p1(10);person p2(20);if(p1==p2) cout<<”the age is equal!”< return 0;}这⾥,因为operator ==是class person的⼀个成员函数,所以对象p1,p2都可以调⽤该函数,上⾯的if语句中,相当于p1调⽤函数==,把p2作为该函数的⼀个参数传递给该函数,从⽽实现了两个对象的⽐较。
C++基础系列——运算符重载1. 运算符重载简介所谓重载,就是赋予新的含义。
函数重载(Function Overloading)可以让⼀个函数名有多种功能,在不同情况下进⾏不同的操作。
同样运算符重载(Operator Overloading)可以让同⼀个运算符可以有不同的功能。
可以对 int、float、string 等不同类型数据进⾏操作<< 既是位移运算符,⼜可以配合 cout 向控制台输出数据也可以⾃定义运算符重载:class Complex{public:Complex();Complex(double real, double imag);Complex operator+(const Complex &a) const;void display() const;private:double m_real;double m_imag;};// ...// 实现运算符重载Complex Complex::operator+(const Complex &A) const{Complex B;B.m_real = this->m_real + A.m_real;B.m_imag = this -> m_imag + A.m_imag;return B;// return Complex(this->m_real + A.m_real, this->m_imag + A.m_imag);}int main(){Complex c1(4.3, 5.8);Complex c2(2.7, 3.7);Complex c3;c3 = c1 + c2; // 运算符重载c3.display();return 0;}运算结果7 + 9.5i运算符重载其实就是定义⼀个函数,在函数体内实现想要的功能,当⽤到该运算符时,编译器会⾃动调⽤这个函数,它本质上是函数重载。
c++ 结构operator用法C++ 结构体是一种复合数据类型,它可以将不同类型的数据组合在一起。
在C++ 中,结构体可以用于封装和组织相关联的数据,使得程序的设计更加模块化和清晰。
本文将介绍C++ 结构体中操作符的重载用法,以及相关注意事项。
1.C++ 结构体简介C++ 结构体是一种用户自定义的数据类型,它可以将不同类型的变量组合在一起。
结构体中的变量称为成员变量,我们可以通过成员变量访问运算符(点运算符)来访问结构体中的数据。
2.操作符重载概述在C++ 中,操作符重载是指对已有运算符进行重载定义,以便在特定类型上执行特定操作。
结构体操作符重载可以让结构体具有更友好的用户接口,使用户能更方便地操作结构体数据。
3.结构体操作符重载实例以下是一个结构体操作符重载的实例:```cpp#include <iostream>using namespace std;struct Point {int x;int y;};// 重载加法运算符Point operator+(const Point &a, const Point &b) {Point result;result.x = a.x + b.x;result.y = a.y + b.y;return result;}int main() {Point p1(1, 2);Point p2(3, 4);Point p3 = p1 + p2;cout << "p3 的坐标为:" << p3.x << "," << p3.y << endl;return 0;}```在上面的示例中,我们为结构体Point 重载了加法运算符。
通过重载后的加法运算符,我们可以直接对两个Point 类型的对象进行加法运算,并得到一个新的Point 类型的对象。
简述运算符重载的规则
运算符重载可以用来定义自定义类型的操作行为。
以下是运算符重载的规则:
1. 运算符重载函数必须是类或枚举类型的成员函数或全局函数。
2. 运算符重载函数的名称必须是“operator”加上要重载的运算符符号,例如“operator +”或“operator <<”。
3. 运算符重载函数必须指定参数列表,包括参数类型和数量,不能有默认值。
4. 运算符重载函数可以返回任何类型,但不能返回void 类型。
5. 运算符重载函数可以是const 成员函数,如果不会修改对象的状态。
6. 运算符重载函数可以被重载多次,只要参数列表不同。
7. 运算符重载函数不能改变运算符的优先级和结合性,也不能改变运算符的语法。
8. 运算符重载应该符合语义上的期望,例如“+”操作符应该执行加法,而不是减法。
9. 运算符重载应该遵循刚才提到的运算符的语法和行为。
总之,运算符重载在正确地使用时,可以使代码更加直观,易于理解,也可以让自定义数据类型具有更多的功能和操作。