首页 > 编程语言 >C++运算符重载

C++运算符重载

时间:2023-08-29 11:33:28浏览次数:47  
标签:函数 C++ C语言 运算符 编译 重载

C语言是没运算符重载的,C++进行了扩充。

C++比C语言多了面向对象(类),多了函数重写,运算符重载,实现了(函数重载跟运算符重载都属于编译器静态绑定了地址,所以是静态多态,而虚函数需要在运行期确定,是动态多态)。

 

如何实现C++跟C语言混合编程?extern "C",其修饰的代码段需要以C语言的方式进行编译链接,可以解决经过编译后得到的函数名不一致的问题

 

为啥会不一致?因为C++提供了函数重载、运算符重载。重载需要提供差异,C++会在编译阶段对函数的函数名进行重命名,重命名了才保证链接器能找到对应的符号。但是C语言不支持。所以一个重命名了一个不重名就出问题。

根据 C++ 标准编译后的函数名几乎都由原有函数名和各个参数的数据类型构成,而根据 C 语言标准编译后的函数名则仅有原函数名构成。

 

运算符重载的原则:

1.不是所有运算符都可以重载,比如sizeof

2.运算符重载之后不应该改变用法

3.作为数据结构类成员函数重载运算符的时候,要注意非静态成员函数在会默认在参数首位添加this指针,会导致如果要重载的运算符是二元运算符,那么只需要提供另一个运算对象参数,如果要重载的是一元运算符那就不需要参数了。

4.如果是全局范围对某个运算符进行重载,也就是说在定义重载函数的时候没有类名没有作用域,但是返回类型和参数类型都用到了某一个自定义的类,用到了其中的private成员变量,那就得将其声明为这个类的友元函数,

必要时需要重载赋值运算符=,以避免两个对象内部的指针指向同一片存储空间。

<<和>>是在 iostream 中被重载,才成为所谓的“流插入运算符”和“流提取运算符”的。

标签:函数,C++,C语言,运算符,编译,重载
From: https://www.cnblogs.com/synapse331/p/17664321.html

相关文章

  • C++11新特性
    文章目录一、关键字及新语法二、STL容器三、多线程四、智能指针五、其他特性一、关键字及新语法列表初始化:inta{10}。auto:自动类型推导。nullptr:空指针。范围for:for(autov:vec)。二、STL容器vector:动态数组。list:双向链表。deque:双端队列。priority_queue:优先队列。map、se......
  • C++语言学习02
    一、函数重载1、什么是函数重载在同一作用域下,函数名相同,参数列表不同的函数构成重载关系函数重载与返回值的类型、参数名无关与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关2、C++是如何实现函数重载的?通过g++-S的方式生成汇编代码可以知道,编译器......
  • C++如何写一个简单的DLL文件
     这个东西其实挺简单的,刚开始写的时候,是在VC的编译器上,按照前人的步骤,老失败,折腾我一天了,结果,我换了个编译器,在vs08的平台上,就成功了,好了,不多少了,分享一下:首先建立一个MyDll的win32项目中建立一个DLL类型的工程,然后创建一个CPP文件,取名MyDll,内容如下:extern"C"__declspec(dllex......
  • java基础-运算符--day03
    目录1.算数运算符2.+号3.++4.=赋值操作5.关系运算6.逻辑运算7.三元运算8位运算1.算数运算符/处以%取余publicclassTestOper01{ publicstaticvoidmain(String[]args){ System.out.println(13/5);//结果为2 System.out.println(13%5);//结果为3 ......
  • python逻辑运算符与流程控制
    Python的基础逻辑运算内容概要算数运算符比较运算符赋值运算符逻辑运算符成员运算符身份运算符流程控制ifelse算术运算符代码演示a=21b=10c=0c=a+bprint("1-c的值为:",c)c=a-bprint("2-c的值为:",c)c=a*bprint("3-c的值......
  • C++ Bjarne Stroustrup
    来自C++之父BjarneStroustrup的人生建议https://mp.weixin.qq.com/s/CULLZELkJpbLJxkGjFxzVA来自C++之父BjarneStroustrup的人生建议 不要过度专业化。不要太笃定自己知晓未来。保持灵活性,记住职业和工作是一个长期的事情。太多的年轻人认为他们可以优化某些东西,然后他们发......
  • 标准C++ -- day06
    一、什么是继承当遇到问题时,先查看现有的类是否能解决一部分问题,如果有则继承该类,并在此基础上扩展以此解决问题,从而缩短解决问题的时间(代码复用)当遇到一个大而复杂的问题时,可以把大问题拆分成若干个不同的小问题,然后为每个小问题设计一个类来解决,最后通过继承的方式把这......
  • 【C++STL基础入门】vector运算和遍历、排序、乱序算法
    @TOC前言C++标准库提供了丰富的容器和算法,其中vector是最常用的容器之一。它以动态数组的形式存储元素,并提供了许多方便的运算符和算法来操作和处理数据。本文将介绍vector的基本运算、遍历方法、排序算法以及乱序算法。通过学习这些内容,您将能够更加灵活、高效地使用vector容器。......
  • C++对象内存模型
    根据前面讲过的知识,C++的对象内存模型主要包含了以下几个方面的内容:如果没有虚函数也没有虚继承,那么对象内存模型中只有成员变量。如果类包含了虚函数,那么会额外添加一个虚函数表,并在对象内存中插入一个指针,指向这个虚函数表。如果类包含了虚继承,那么会额外添加一个虚基类表,......
  • C++面向对象进阶
    C++中的拷贝是啥意思?是利用一个已经存在的对象创建一个新对象,用已经存在的数据初始化新对象的内存。对象创建有两个阶段:1.分配内存2.进行初始化   是不是new关键字的使用s1(s2),s1=s2,s1=1,类似这种都是以拷贝的方式完成的初始化,区别只是有没有进行隐式的类型转......