函数重载,操作符重载(王桂林视频笔记)

匹配原则:

1 严格匹配找到则调用

2 通过隐式转换寻找一个匹配,找到则调用

3 上述两项找不到就会报错

?(隐式)自动转换类型中 double可以转成 float 但是float转换成double会出错,8字节到4字节,损失精度

? c++允许 int 到 long 和 double 隐式类型转换,遇到这种情况会引起二义性,解决办法可以是使用强制类型转换

? 鉴于上述, 设计的时候尽量避开隐式类型转换

底层实现:命名倾轧 name mangling

mystrlen函数的功能是计算字符串的长度,并作为函数值返回

详细:

strlen函数的功能,从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符‘\0‘为止,返回字符串的实际长度。注意不包括 ‘\0‘ 字符

extern 用来扩展作用域,是原来仅限于本文件的作用域扩展到其他文件中,可被重载,变成其他意思:说明某个语句是c语言的语句而非c++的,c语言没有倾轧的概念而c++有,所以用extern可以消除倾轧,若原来重载的文件都同时消除倾轧也是可以运行的

重点:c++要完全兼容c语言,而有些c语言库里的文件是没有被倾轧的,但使用c++在调用时,编译器会自动倾轧,调用就链接不上了,为保证其在c++中不被倾轧,可以在调用前加一个 extern “c"

操作符重载:

时间: 2024-10-27 08:19:36

函数重载,操作符重载(王桂林视频笔记)的相关文章

友元函数实现操作符重载的应用场景-友元函数实现左移右移操作符重载

先定义一个测试类Complex,其中用成员函数的方法重载了+.-.前置++.前置--.后置++.后置--这6个运算符,当然,这6个操作符也可以用友元函数方式重载,但习惯上这些都直接用成员函数方式重载. demo #include <iostream> using namespace std; class Complex { public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } ~Complex();

4 C++基础4 类 const函数 转全局函数 返回*this 数组类。友元 函数 类 操作符重载

1,请问类中函数 const修饰的谁? [email protected]:~/c++$ cat main.cpp  #include <iostream> #include <stdlib.h> using namespace std; class A { public: //const的三种写法 //const void fun(int a,int b) //void const fun(int a,int b) //void fun(int a,int b) const vo

C++ Primer 学习笔记_59_重载操作符与转换 --输入/输出、算术/关系操作符

重载操作符与转换 --输入/输出.算术/关系操作符 支持I/O操作的类所提供的I/O操作接口,一般应该与标准库iostream为内置类型定义的接口相同,因此,许多类都需要重载输入和输出操作符. 一.输出操作符<<的重载 为了与IO标准库一致,操作符应接受ostream&作为第一个形参,对类类型const对象的引用作为第二个形参,并返回ostream形参的引用! ostream &operator<<(ostream &os,const ClassType &

【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a = a; this->b = b; } //成员函数 Test &Gadd2(Test &t2) { this->a = this->a + t2.a; this->b

C++学习笔记-操作符重载

操作符重载(operator overloading)是一种形式的C++多态,C++将操作符重载扩展到用户自定义的类型,如允许使用+将两个自定义的对象相加,编译器将根据操作数的数目和类型决定使用那种加法定义. 要重载操作符,需使用操作符函数,格式如下: operator op (argument-list) op:要重载的操作符 argument-list: 操作数 操作符函数可以是类的成员函数,也可以是友元函数,如果是类成员函数,则第一个操作数是调用对象,它不在argument-list中.

c++ --&gt; 操作符重载

一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符.我们不妨先直观的看一下所谓的操作符重载: #include <iostream> using namespace std; int main() { int a = 2 , b = 3; float c = 2.1f , d = 1.2f; cout<<"

【C++ Primer】重载操作符与转换

十四.重载操作符与转换 1. 重载操作符的定义 重载操作符必须具有至少一个类类型或枚举类型的操作数,这条规则强制重载操作符不能重新定义用于内置类型对象的操作符含义. int operator +(int, int) // 错误,内置数据类型不能重载操作符 重载操作符,操作符的优先级.结合性或操作数数目不能改变.重载操作符并不保证操作数的求值顺序,不再具备短路求值特性,因此,重载&&.||.逗号操作符不是一种好的做法.除了函数调用操作符 operator()外,重载操作符时使用默认实参是非法

实现操作符重载的两种方式

操作符重载的实现方式有两种,即通过"友元函数"或者"类成员函数". 1.友元函数重载操作符的格式: 1 class 类名 2 { 3 friend 返回类型 operator 操作符(形参表); 4 }; 5 //类外定义格式: 6 返回类型 operator操作符(参数表) 7 { 8 //函数体 9 } 2.类成员函数实现操作符重载的格式: 1 class 类名 2 { 3 public: 4 返回类型 operator 操作符(形参表): 5 }; 6 //类

操作符重载!

操作符重载为操作符提供不同的语义 #include <iostream> using namespace std; struct Complex { int a; int b; }; int main() { Complex c1 = {1,2}; Complex c2 = {3,4}; Complex c3 = c1 + c2;//编译出错 cout << "Press any key to continue..." << endl; cin.ge