C++ 运算符重载 各类详细介绍
- 格式:ppt
- 大小:317.00 KB
- 文档页数:60
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语言重载赋值运算符C语言作为一门高级编程语言,提供了丰富的功能以满足各种编程需求。
其中,运算符重载就是一项非常重要的特性。
运算符重载可以让程序员自定义已有运算符在新类型上的操作方式,使得语言更加灵活和强大。
本文将详细介绍C语言中赋值运算符的重载,包括重载的原理、步骤、方法以及注意事项。
1.C语言中的重载概念C语言中的运算符重载是指在已有的运算符上,根据运算对象的类型,赋予新的操作含义。
这种重载是基于类型的,不同类型之间的运算符重载有不同的处理方式。
运算符重载可以让原有运算符在特定类型上具有更符合语义的操作方式,例如对赋值运算符的重载可以让赋值操作更加直观。
2.赋值运算符的重载原理在C语言中,赋值运算符"="原本用于将右侧的值赋给左侧的变量。
当我们对赋值运算符进行重载时,实际上是将原有赋值操作转换为一个新的表达式,这个表达式中包含了重载后的赋值操作。
重载后的赋值运算符需要满足以下条件:- 重载后的赋值运算符仍为一个二元运算符。
- 重载后的赋值运算符的优先级和结合性与其他运算符保持一致。
- 重载后的赋值运算符需要考虑运算对象的类型,以实现正确的赋值操作。
3.重载赋值运算符的步骤与方法重载赋值运算符的步骤如下:- 定义一个函数,该函数的参数列表中包含一个或多个变量引用。
- 在函数体中,对传入的变量进行操作,以实现重载后的赋值操作。
- 使用函数返回值替换原赋值表达式中的右侧值。
以下是一个重载赋值运算符的示例:```c#include <iostream>class MyClass {public:void operator=(const MyClass& other) {// 实现重载后的赋值操作std::cout << "重载赋值运算符被调用" << std::endl;}};int main() {MyClass obj1;MyClass obj2;obj1 = obj2; // 调用重载后的赋值运算符return 0;}```4.重载赋值运算符的注意事项- 重载赋值运算符时,需要确保运算对象具有可赋值性。
c++结构体重载运算符C++结构体可以通过重载运算符来实现自定义的操作符行为。
重载运算符允许我们使用结构体对象与其他对象之间进行类似于内置数据类型的操作。
下面将介绍一些常用的运算符重载的方式以及其使用场景。
1. 算术运算符重载:- 重载+运算符:可以用于结构体对象之间的相加操作。
- 重载-运算符:可以用于结构体对象之间的相减操作。
- 重载*运算符:可以用于结构体对象与标量之间的乘法运算。
- 重载/运算符:可以用于结构体对象与标量之间的除法运算。
2. 关系运算符重载:- 重载==运算符:用于比较两个结构体对象是否相等。
- 重载!=运算符:用于比较两个结构体对象是否不相等。
- 重载<运算符:用于比较两个结构体对象的大小关系。
- 重载>运算符:用于比较两个结构体对象的大小关系。
- 重载<=运算符:用于比较两个结构体对象的大小关系。
- 重载>=运算符:用于比较两个结构体对象的大小关系。
3. 赋值运算符重载:- 重载=运算符:用于将一个结构体对象的值赋给另一个对象。
- 重载+=运算符:用于将一个结构体对象与另一个对象相加,并将结果赋给第一个对象。
- 重载-=运算符:用于将一个结构体对象与另一个对象相减,并将结果赋给第一个对象。
- 重载*=运算符:用于将一个结构体对象与标量相乘,并将结果赋给第一个对象。
- 重载/=运算符:用于将一个结构体对象与标量相除,并将结果赋给第一个对象。
4. 输入输出运算符重载:- 重载<<运算符:用于将结构体对象的数据输出到标准输出流。
- 重载>>运算符:用于从标准输入流中读取数据,并赋给结构体对象的成员变量。
运算符重载的基本语法如下:```返回类型 operator运算符(参数列表) {// 重载运算符的实现代码// 可以直接访问结构体对象的成员变量// 可以调用结构体对象的方法// 可以与其他对象进行运算// 返回运算结果}```在进行运算符重载时,需要注意以下几点:- 重载运算符必须是成员函数或友元函数。
详解C++编程中的重载流插⼊运算符和流提取运算符C++的流插⼊运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输⼊流类istream和输出流类ostream。
cin和cout分别是istream类和ostream类的对象。
在类库提供的头⽂件中已经对“<<”和“>>”进⾏了重载,使之作为流插⼊运算符和流提取运算符,能⽤来输出和输⼊C++标准类型的数据。
因此,凡是⽤“cout<<”和“cin>>”对标准类型数据进⾏输⼊输出的,都要⽤#include 把头⽂件包含到本程序⽂件中。
⽤户⾃⼰定义的类型的数据,是不能直接⽤“<<”和“>>”来输出和输⼊的。
如果想⽤它们输出和输⼊⾃⼰声明的类型的数据,必须对它们重载。
对“<<”和“>>”重载的函数形式如下:istream & operator >> (istream &, ⾃定义类 &);ostream & operator << (ostream &, ⾃定义类 &);即重载运算符“>>”的函数的第⼀个参数和函数的类型都必须是istream&类型,第⼆个参数是要进⾏输⼊操作的类。
重载“<<”的函数的第⼀个参数和函数的类型都必须是ostream&类型,第⼆个参数是要进⾏输出操作的类。
因此,只能将重载“>>”和“<<”的函数作为友元函数或普通的函数,⽽不能将它们定义为成员函数。
重载流插⼊运算符“<<”在程序中,⼈们希望能⽤插⼊运算符“<<”来输出⽤户⾃⼰声明的类的对象的信息,这就需要重载流插⼊运算符“<<”。
[例] ⽤重载的“<<”输出复数。
C++运算符重载三种形式(成员函数,友元函数,普通函数)详解三种重载⽅式⾸先,介绍三种重载⽅式:1//作为成员函数重载(常见)2class Person{3 Private:4string name;5int age;6public:7 Person(const char* name, int age):name(name),age(age){}8bool operator<(const Person& b);910 };11bool Person::operator<(const Person& b)12 {13//作为成员函数时,*this即为左操作数a14 ...15 }1//作为友元函数重载2class Person{3private:4string name;5int age;6public:7 Person(const char* name, int age):name(name),age(age){}8 friend bool operator<(const Person& a,const Person& b);910 };11bool operator<(const Person& a,const Person& b)12 {13 ...14 }1//作为普通函数重载(不推荐)2class Person{3public://注意,重载运算符为普通函数时,使⽤到的类成员必须为public4string name;5int age;6public:7 Person(const char* name, int age):name(name),age(age){}89 };10bool operator<(const Person& a,const Person& b)11 {12 ...13 }作为成员函数重载先介绍第⼀种:bool Person::operator<(const Person& b),bool是函数返回类型,Person::只是指定了成员函数所属类名。