C++程序设计——运算符重载(运算符重载的概念;运算符成员函数与友元函数;单目运算符重载;重载流运算符;双目运算符重载;赋值运算符重载)

C++中的运算符重载技巧与实例应用 运算符重载意味着将一个运算符(如加号、减号、等于==等)赋予一个新功能,使其可以用于处理用户自定义类型的对象。它的好处在于,开发者可以以一种直观且符合逻辑的方式来编写代码,使得程序设计更加符合问题域的实际意义。例如,在处理复数时,如果我们能够直接使用来将两个复数相加,那么这个过程就变得非常自然和直观。在C++中,运算符重载是一种语言特性,它允许程序员为自定义类型重新定义运算符的行为。这使得我们可以使用直观的运算符来对对象执行操作,就像它们是内置类型一样。 阅读详情

目录

前言

一、运算符重的概念与意义

1.运算符重载

(1)函数重载 

(2)运算符重载 

2.运算符重载的意义 

(1)例子引入 

(2)意义

(3)运算符重载的限制 

二、运算符成员函数/非成员函数

1.两种运算符重载方式

2.二者差别

3. 如何选择?

4.单双目运算符重载

三、单目运算符重载 

1.单目运算符重载特点

2.示例

3.重载单目运算符时需要注意的地方 

四、重载流运算符

1.流运算符回顾

2.重载流运算符 

五、双目运算符重载 

1.双目运算符重载

2.示例,重载 Complex 类的 +、-、*、/ 运算

3.补充

六、赋值运算符重载 

1.赋值运算符的缺省语义

2.缺省复制操作的副作用(举例说明)

总结


前言

学习面向对象程序设计,当构造大量的类时,为了使运算的方便,C++允许定义多个同名函数来处理类似却不同的形式的操作。

一、运算符重的概念与意义

1.运算符重载

(1)函数重载 

  • C++中允许定义多个同名函数来实现类似操作
  • 重载函数的参数一般不同(参数个数、类型或顺序不同)
  • 构造函数重载

(2)运算符重载 

  • +、-、*、/运算符的重载
  • cout、cin运算符的重载

2.运算符重载的意义 

(1)例子引入 

考虑下面关于复数类 complex 的定义:

class Complex {
private:
          double  real;     double  image;    // 实部,虚部 
public:
         Complex();   
         Complex(double, double);
         virtual ~Complex();           
         Complex add(const Complex &) const;   //复数加
         Complex sub(const Complex &) const;   //复数减
         Complex mul(const Complex &) const;   //复数乘
         Complex div(const Complex &) const;    //复数除
     void input();     //复数输入
     void print();     //复数输出
};

实现和调用 :

Complex  Complex::add (const Complex & c) const {
      Complex d(this->real + c.real, this->image+c.image);
      return d;
};
int main() {
      Complex c1(3,5); 
      Complex c2(2,6);
      Complex c = c1.add(c2);      
      return 0;
};

 观察下面的数学运算表达式 

  • 自然数加法:3+5
  • 有理数加法:3.5+5/2
  • 实数加法:e + 2.7
  • 复数加法:(2+4i) + (5+6i)

从数学表达式到程序表示

  1. 运算符“+”可应用于 double 类型及其子类型。
  2. 能否将“+、-、*、/”等运算符用于自定义的数据类型(如 Complex)中?

(2)意义

​使用运算符重载

class Complex {
      double  real;     double  image;    // 实部,虚部 
public:
      Complex();   
      Complex(double, double);
      ~Complex();           
      Complex operator+(const Complex &) const;   //复数加
      Complex operator-(const Complex &) const;   //复数减
      Complex operator*(const Complex &) const;   //复数乘
      Complex operator/(const Complex &) const;    //复数除,等会不写了
      friend ostream& operator<< (ostream&, Complex &); 
      friend istream& operator>> (istream&, Complex &);             
};

双目运算符重载

Complex  Complex::operator+ (const Complex & c) {
      Complex d(this->real + c.real, this->image+c.image);
      return d;
};
Complex  Complex::operator- (const Complex & c) {
      Complex d(this->real - c.real, this->image-c.image);
      return d;
};
Complex  Complex::operator* (const Complex & c) {
      Complex d(this->real * c.real - this->image*c.image, 
	this->real * c.image + this->image * c.real);
      return d;
};

流运算符重载

ostream& operator<< (ostream& os, Complex & c) {
     os << c.real<<“+i*”<<c.image;
     return os;  
}
istream& operator>> (istream& is, Complex & c) {
     is >> c.real>>c.image;
     return is;  
}

调用程序

int main()
{
    Complex x, y, z;
    cin >> y >> z;
    x = y + z;
    cout << x << endl;
    cout << y – z << endl;
    return 0;
}

意义

  • 通过运算符能实现的功能通过函数一样能够实现,运算符重载不会在程序功能上带来好处
  • 使用运算符能使程序变得更加清晰、简单、符合人们的习惯
  • 运算符重载使C++具有更好的可扩充性,这也是C++最具吸引力的特点之一

(3)运算符重载的限制 

C++ 中可被重载的运算符

  • 算术运算:+、-、*、/、%、++、--
  • 位运算:^、&、| 、~、>>、<<
  • 逻辑/关系运算:!、&&、||、<、>、>=、<=、==、!=
  • 赋值运算:=、+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=
  • 其他:->、,、[]、()、new、delete

不允许被重载的运算符

  • . 、::、?:、sizeof

对运算符重载的限制

  • 运算符重载不能改变运算符的优先级
  • 运算符重载不能改变运算符的结合性
  • 运算符重载不能使用默认参数
  • 运算符重载不能改变操作数的个数
  • 不能建立新的运算符
  • 运算符重载只能作用于自定义数据类型
  • 重载运算符 () 、[]、->、=时,必须使用成员函数进行重载
  • 所有运算符必须显式重载

二、运算符成员函数/非成员函数

1.两种运算符重载方式

  1. 通过成员函数进行重载
  2. 通过非成员(友元)函数进行重载

2.二者差别

  1. 通过成员函数重载的运算符,在调用时,其第一操作数必须是该类的一个对象
  2. 使用非成员函数重载的运算符无此限制,只需要调用时的参数类型与定义时依次相同即可

3. 如何选择?

  • 一般情况下,尽量使用成员函数进行重载
  • 某些特殊情况只能使用非成员函数,比如流操作和需要保留某些运算符的可操作性

4.单双目运算符重载

单目运算符重载(以“  !”为例) 

  1.  使用成员函数/方法进行重载:
  2.  使用非成员函数进行重载: 

双目运算符重载(以“ + ”为例) 

  1.  使用成员函数进行重载:
  2. 使用非成员函数进行重载:

三、单目运算符重载 

1.单目运算符重载特点

  • 采用成员方法/函数重载单目运算符时,参数数目为 0
  • 重载单目运算符时,其唯一的操作数只能是(自定义)对象或者其引用

2.示例

定义字符串类型 String,并以成员函数方式重载运算符 !,当字符串 s 长度为 0 时 !s 返回值为 true,否则 !s 返回值为 false。

class String {
public:
      String (const char* m = NULL); 
      ~String();
      bool operator! ();      
private:
      char* str;
};

String::String(const char* m) {
   if (m==NULL)  
	str=NULL;
   else {
	str = new char[strlen(m)+1];
	strcpy(str,m);
   }
}

String::~String() {
   if (str!=NULL) delete [] str;  
}

bool String::operator! () {
   if (str==NULL || strlen(str)==0)  
   	return  true;
   else 
	return false;
}

int main (int argc, char* argv[]) {
     String s1, s2(“Something”);
     if (!s1) cout<<“s1 is empty!”<<endl;
     if (!s2) cout<<“s2 is empty!”<<endl;   
    //这里,!s1 和 !s2 本质上是 s1.operator!() 和 s2.operator!() 的简写。
     return 0;
}

还可以以友元函数的方式进行重载 

class String {
      friend bool operator! (const String &);
public:
      String (const char* m = NULL); 
      ~String();      
private:
      char* str;
};

bool operator! (const String & str) {
   if (str.str==NULL || strlen(str.str)==0)  
   	return  true;
   else return false;
}

3.重载单目运算符时需要注意的地方 

自增运算符(++)和自减运算符(--)有两种使用方式,即前置方式与后置方式。C++ 规定,重载后置方式的自增/自减运算时,需要增加一个额外 int 型参数


四、重载流运算符

1.流运算符回顾

  • 流插入运算符 “<<”和流提取运算符“>>”,其第一操作数分别是一个 ostream 对象(典型的如 std::cout)和一个 istream 对象(如 std::cin)
  • cin 和 cout 对象支持任意基本数据类型的输入/输出操作。这是因为每个基本类型均在 istream / ostream 中有相应的重载(overload)

 若希望自定义类型支持标准输入/输出,应如何实现?如:

Complex  c(3,5);        // c 是一个复数对象
cout << c << endl;     // 通过标准输出打印 c  

2.重载流运算符 

  • 这时,应该重载 <<  运算符;显然不应该修改系统标准库中 ostream 的实现
  • 如果通过 Complex 类的成员函数重载 << 运算符,那么在使用该运算符时,必须是某个Complex 类的对象作为第一操作数,这显然不行
  • 因此,必须用非成员函数对其进行重载
ostream& operator<< (ostream& os, Complex & c) {
     os << c.real<<“+i*”<<c.image;
     return os;  
};

istream& operator>> (istream& is, Complex & c) {
     is >> c.real>>c.image;
     return is;  
};

五、双目运算符重载 

1.双目运算符重载

  • 回顾:前面讨论了两个特殊的双目运算符——流插入和流提取运算符的重载。
  • 分析:重载双目运算时需要考虑两个因素:一是被重载的运算符对左右操作数是否有要求;二是是否要保留运算符的可交换性。
  • 总结:双目运算被重载为带有一个参数的成员函数或者两个参数的非成员函数,且重载为非成员函数时必须有一个参数为类对象或者类对象的引用。

2.示例,重载 Complex 类的 +、-、*、/ 运算

class Complex {
      double  real;     double  image;    // 实部,虚部 
public:
      Complex();   Complex(double, double);
      virtual ~Complex();           
      double getReal();    double getImage(); 
      void  setReal(double);  void setImage(double);
      Complex operator+(const Complex &);   //复数加
      Complex operator-(const Complex &);   //复数减
      Complex operator*(const Complex &);   //复数乘
      Complex operator/(const Complex &);    //复数除
      friend ostream& operator<< (ostream&, Complex &); 
      friend istream& operator>> (istream&, Complex &);             
};
Complex  Complex::operator+ (const Complex & c) {
      Complex d(this->real + c.real, this->image+c.image);
      return d;
};

Complex  Complex::operator- (const Complex & c) {
      Complex d(this->real - c.real, this->image-c.image);
      return d;
};

Complex  Complex::operator* (const Complex & c) {
      Complex d(this->real * c.real - this->image*c.image, 
	this->real * c.image + this->image * c.real);
      return d;
};

3.补充

练习

  1. 重载 List 类的 [] 运算符,用以实现下标功能
  2. 思考,函数的原型应该是什么?

问题:

何时应该返回引用?何时返回值?

——当整个表达式“具有左值属性时”,换句话说,能够被赋值时,应该返回引用。

Node& List::operator[] (int index) 
{
     for(Node* pnt=head; pnt != NULL && index>0; )
      {
	   pnt = pnt->next; 
	   index--;
     }    // 定位到链表的第 index 个节点
     if (pnt == NULL)  
	 throw  0;   // 抛出异常
    
     return (*pnt);  // 获得 pnt 节点处的 value 值                     
}

六、赋值运算符重载 

1.赋值运算符的缺省语义

事实上,赋值运算符不需显式重载便可直接使用在自定义类对象之间;其缺省操作是逐个复制所有的成员(浅拷贝)。比如                  

的执行结果是使 c1.real 和 c1.image 的值分别赋为 3 和5。但是,当对象成员中含有指针字段时,这样的操作会带来一定的副作用。

2.缺省复制操作的副作用(举例说明)

Stack s1(15);
Stack s2;
s2=s1;

上方程序会造成什么副作用?

该赋值发生后:

  • s1.data 和 s2.data 将指向相同的内存空间
  • s2 原来指向的内存空间丢失
  • 对 s1的操作也会影响到 s2,反之亦然
     

因此,在这种情况下,应该重载赋值运算符:

Stack& Stack::operator= (const Stack & st){
      if (&st!=this){          // important!!! 	
             delete[] data;
             data = new int [st.size];
             top = st.top;
             size=st.size;
             for(int i=0; i<top; i++)  // 数据复制
	      data[i] = st.data[i];
     }
     return * this;	         
}

总结

重载函数/运算符的操作实则有很多细节和限制,本篇博客总结了课堂的PPT以及补充内容,其中的真正知识运用还得实践操作才能融会贯通!

Windows10检查Cuda和cuDNN是否安装成功? 简介:根据上篇博客已经完成了CUDA和cuDNN的安装步骤,完成对其的安装。下面将来检查它们是否安装成功。 1 .首先win+R进入CMD,在命令行输入nvcc -V,如下图所示,则表示cuda已经安装成功。 2 .进入到cuda的安装路径,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite,找到如下两个.exe文件: 首先执行:deviceQuery.exe,查看是否出现如下界面: 然后执行bandwid 阅读详情

相关推荐

关于笔记本测试的面试准备 2021-10-11

** 关于笔记本测试的面试准备 ** 一、根据JD分析,工作内容以软测为主,硬件知识需要了解一点。 以下几个问题为主要: 1.了解VGA、audio、wlan、bt、TP 、camera等driver,BIOS和image测试。 2.了解性能测试工具?压力测试相关设置? 3.了解preload流程? 二、解决 VGA: video graphics array ——笔记本上外接显示器的接口。 【VGA接口兼容性更强,但是不支持高分辨率。 支持高分辨率:HDMI、DIV、TP】 bt【Bluetooth

xw_009的博客 1865

C++运算符重载一:运算符重载、复数类CComplex、输入输出运算符重载

文章目录一、运算符重载二、复数类CComplex三、输出运算符重载 一、运算符重载 运算符重载: 使对象的运算运算表现得和编译器内置类型一样,使同一个运算符可以有不同的功能。即定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。 运算符重载实质上是函数的重载,重载运算符的函数一般格式如下: 函数类型 operator 运算符名称(形参表) {对运算符的重...

Rain的博客 4999

CAD图纸智能搜索三大突破:图纸秒搜技术、相似度匹配与AI语义搜索

CAD图纸作为核心资产,长期面临管理难题:传统全文检索需逐张打开图纸人工查找,效率低下;相似图纸匹配依赖人工比对,误差率高;非专业人员难以通过模糊描述精准定位图纸。针对这些问题,唯杰地图推出三项智能解决方案:一是基于现代化索引引擎的​​全文搜索​​,支持秒级检索图纸内的文字、图层、块名称等,并可多条件组合查询;二是​​相似度搜索​​,通过SIFT算法和深度学习提取几何特征与拓扑结构,实现高精度匹配;三是​​AI语义搜索​​,利用大模型解析自然语言指令(如“查找半径为10的红色圆”),直接定位目标图形。

vjmap的博客 1865

C++多态性——运算符重载

运算符重载函数(1)在类外定义的运算符重载函数(2)友元运算符重载函数a.双目运算符重载b.单目运算符重载(3)成员运算符重载函数a.双目运算符重载b.单目运算符重载补充:前置++(--)与后置++(--) (1)在类外定义的运算符重载函数 这里以重载运算符+为例: #include<iostream> using namespace std; //定义一个复数类 class Complex { public: double real;//实部 double imag;//虚部 Comp

乾yz的博客 473

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 519

计算机视觉教程1-1:透视空间与透视变换

在生活中,透视现象很常见,其物理本质是光的直线传播。由于人眼与相机在捕获图像时均存在透视现象,因此计算机几何基于透视空间进行研究。本节介绍透视变换原理

FRIGIDWINTER的博客 3089

上机——实验四

实验四:运算符重载 实验内容: (1) 定义一个复数类 Complex,虚部和实部为私有数据类型。 (2) 重载加法运算符,减法运算符,+= 运算符。 (3) 重载一元负号和一元正号。 (4) 编写一个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实 现重载,除法“/”用成员函数实现重载。 代码如下: #include <iostream> using namespace std; class complex{ private: double real, image;

qq_45788636的博客 798

基于Termux的Android平台OpenClaw部署:移动端AI助理实现

本文介绍了在Android设备上通过Termux部署OpenClaw AI助理的方案。Android设备的便携性、Termux提供的完整Linux环境以及多样化的硬件配置使其成为理想的部署平台。文章详细分析了不同级别Android设备的硬件规格(从入门级到旗舰级),并提供了最低/推荐配置要求。部署步骤包括Termux安装初始化、Python环境配置以及性能优化建议。该方案充分利用Android设备的传感器和电池供电优势,为移动办公、学习等场景提供了低成本、高便携性的AI助理解决方案。

博客 3009

【C++ 】运算符重载

一、运算符重载的基本概念 我们知道C++预定义的运算符,只能用于基本数据类型的运算 如:整型,实型,字符型,逻辑型....... 运算符如:+、-、*、/、%、&、~、!、|、=、<<、>>、!=、..... 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 运算符重载的目的是:扩展C++中提供的运算符的适用范围,使之能作用于对象。 二、运算符重载的形式 1、运算符重载的实质是函数重载 2、可以重载为普通函数,也可以重载为成

weixin_55664293的博客 6531

STM32步进电机控制三大方案:GPIO/定时器/PWM深度对比

步进电机控制是嵌入式运动控制的基础技术,其核心在于精确生成脉冲(PUL)、方向(DIR)和使能(EN)三路数字信号。原理上,脉冲频率决定转速,脉冲数量决定位置,方向电平决定转向,而使能时序保障驱动器可靠启停。该技术具有高定位精度、开环稳定性与低成本优势,广泛应用于3D打印机、CNC设备、自动化产线等场景。在STM32平台实现时,需兼顾硬件隔离设计(如6N137光耦)、HAL库抽象封装及实时性约束。本文围绕GPIO模拟、定时器中断与PWM比较输出三种主流方法,系统剖析其时序机制、CPU开销、抗干扰能力与工业适

weixin_35755640的博客 86

ceph recovery 相关参数

可以修改的最大回填/恢复选项列在 “恢复/回填选项” 部分。mClock 的修改 默认回填/恢复限制由 osd_mclock_override_recovery_settings 选项,设置为 默认为 false。尝试修改任何默认恢复/回填限制而不设置门控选项,会将该选项重置为 mClock 默认值,并在集群日志中记录一条警告消息。请注意,默认值可能需要几秒钟才能恢复生效。请使用 config show 命令验证限制,如下所示。就直接设置以下参数,过一会就变回了默认值。简单点说官网的意思就是不设置。

weixin_40548182的博客 277

关于运算符重载的两种方式的优缺点比较

大家都知道一般常用两种重载运算符的方式分别是: 1.作为成员函数重载运算符.    2.作为友元函数重载运算符. 这里我给个例子. 这里是DoubleA class DoubleA { public: DoubleA(){}; DoubleA(DoubleB m); //DoubleB -> DoubleA ~DoubleA(){}; double x; }

YzlCoder的记事本 8958

[27] cuda 应用之 核函数实现图像通道变换

[27] cuda 应用之 核函数实现图像通道变换

yohnyang的博客 201

C++基础08(多态和运算符重载)

在 C++ 中,当操作数包含类对象时,运算符操作实际上是一个函数。由此可见,对于类对象而言,操作符运算实际上就是调用对应的类方法,但要注意,除了赋值运算操作符(即等号)是默认的之外,其余的大多数运算符都是需要定义了才能用的,否则会被判定为非法。引⼊运算符重载是为了实现类的静态多态性。运算符重载是对已有的运算符赋予多重含义,使⽤⼀个运算符作⽤与不同类型的数据时导致不同的⾏为。运算符重载的⽅法是定义⼀个重载运算符的函数,在需要执⾏被重载的运算符时,系统就⾃动调⽤该函数,以实现相应的运算。

jxcklfn的博客 1209

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C++ 程序设计】第 4 章:运算符重载

运算符重载(Operator Overloading)是指,程序员可以对类的成员运算符(类的成员函数)进行重新定义,实现某些特定功能。在 C++ 中,运算符重载使得程序设计更加自然、简洁、易读,同时还可以提高代码的重用性和可维护性。

顾三殇 —— 博客空间(软件测试) 2386

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

谭浩强C++程序设计第10章运算符重载

第10章、运算符重载   1.      运算符重载实质上就是函数的重载;   2,函数类型 operator 运算符名称(形参表列)          {对运算符的重载处理}           Operator + 就是函数名;            C1+c2被解释为c1.operator + c2   运算符重载能使用户程序易于编写,阅读和维护;   3,重载运算

C__Monkey的专栏 2269

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

面向对象程序设计——运算符重载

运算符重载 运算符重载的概念 实质 为运算符定义新的运算功能,使它除具备有原来系统规定的功能外,还具备新定义的功能。运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的C++多态。目的在于让人能够用同名的函数来完成不同的基本操作。要重载运算符,需要使用被称为运算符函数的特殊函数形式,运算符函数形式:operator p(argument-list)//operator 后面的’p’为要重载的运算符符号。 规则 C++规定重载后的运算符的操作对象必须至少有一个是用户定义的类型(防止二义性)

Liyolo007的博客 1435

(C++程序设计)—— 运算符重载

<C++程序设计>——运算符重载(例题) 复数中将双目算术运算符(+,-,*,/)与赋值运算符(+=,-=)重载为友元函数 下面是例题的源代码: #include <iostream.h> #include <stdlib.h> #include <math.h> class Complex //Complex是复数 {...

weixin_45083249的博客 409

对运算符进行重载【C++】

C++对运算符进行重载

qq_45783047的博客 1155

c++-基础部分-运算符重载-小总结

清华大学出版社《c++程序设计》(第三版)中简单总结的一些知识点 C++不允许定义新的运算符,但允许运算符重载,重载运算符的函数名 operator加运算符 x=y+z 可以等价写为:x.operator=(y.operator+(z)) 运算符重载有一系列限制,详情见P293 运算符重载函数至少有一个是参数是自定义类对象 重载为类的成员函数时, § 运算符通过类的对象调用,运算重载符可以通过this指针直接操作对象的数据成员(这个this指针就是类的对象传递给运算符函数的隐含参数) § 重载为类的成员

weixin_44577500的博客 446

C++赋值运算符重载实战:从头歌平台实训7看成员函数与普通函数的区别

本文通过头歌平台实训7的C++赋值运算符重载实战,深入剖析了成员函数与普通函数在实现上的核心区别。重点探讨了为何赋值运算符必须作为成员函数,并对比了拷贝赋值、类型转换赋值及复合赋值运算符的不同实现策略与性能考量,为编写高效、规范的C++代码提供实践指导。

pear55的博客 676

c++ 运算符重载

C++支持运算符重载  通过运算符重载,扩大了C++已有运算符的作用范围,使之能用于类对象。 运算符重载对C++有重要的意义,把运算符重载和类结合起来,可以在C++程序中定义出很有实用意义而使用方便的新的数据类型。 运算符重载使C++具有更强大的功能、更好的可扩充性和适应性,这是C++最吸引人的特点之一。 重载运算符的规则 (1) C++不允许用户自己定义新的运算符,只能对已有的C+

smallgyy的专栏 1341

运算符重载

C++语言中只能重载原先预定义的运算符。程序员不能臆造新的运算符来扩充C++语言。必须把重载的运算符限制在C++语言中已有的运算符范围之内。 运算符重载函数一般采用如下两种形式:一是定义为它将要操作的类的成员函数(称为成员运算符函数),二是定义为类的友元函数(称为友元运算符函数)。 类型转换是将一种类型的值转换为另一种类型的值。对于用户自己定义的类类型与其他数据类型之间的转换,通常可归纳为以下两种方法:通过构造函数进行类型转换;通过类类型转换函数进行类型转换。构造函数可以用来将其他类型的值转换为它所在类的类

clp20097522的专栏 1206

C++操作符重载(小原则)

一.运算符重载的含义与定义方式l         C++已有的运算符只适合处理C++的基本数据类型。l         C++允许重新定义已有的运算符(运算符重载),以便它能处理程序员定义类型(类类型)。l         运算符重载就是赋予已有的运算符多重含义。运算符重载与函数重载类似,是它的特殊类型。l         C++通过重新定义运算符,使它能够用于特定类的对象执行特定

阿泰 2061

C++运算符重载探讨

2002-09-16· ·阿青··VC大本营前言  多态性是面向对象程序设计的重要特征之一。它与前面讲过的封装性和继承性构成了面向对象程序设计的三大特征。这三大特征是相互关联的。封装性是基础,继承性是关键,多态性是补充,而多态又必须存在于继承的环境之中。  所谓多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。这里所说的消息主要是指对类的成员函数的调用,而不同的行为是指不同的实现。

kedoumy的专栏 2520

谭浩强第三版第10章运算符重载

文章目录1、运算符重载2、运算符重载的方法 1、运算符重载 重载——一名多用。同一个运算符,在不同的场合使用有不同的作用。 2、运算符重载的方法 定义一个重载运算符的函数。运算符重载实质上是函数的重载 一般格式: 函数类型 operator 运算符名称(形参表){对运算符的重载处理} 如:Complex operator +(Complex &c1,Complex &c2); 函数名是operator 运算符名称,即“operator +”,称:“operator +"重载了运算符”+“ 参

weixin_43325374的博客 584
上一篇: [XCTF]funny_video(难度2)
下一篇: C++语言入门全教程(持续更新)
Mr_Fmnwon
博客等级 码龄5年 1604粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值