精华内容
下载资源
问答
  • C++重载

    2013-09-21 16:26:21
    C++重载实现机制——名字修饰 C++重载禁止通过返回值重载 C++重载的名字修饰机制提供了类型安全连接的安全网,防止函数声明与函数定义不一致的错误出现 C++多个重载函数编译之后生成多个不同的目标代码段,从而实现...

    C++重载实现机制——名字修饰

    C++重载禁止通过返回值重载

    C++重载的名字修饰机制提供了类型安全连接的安全网,防止函数声明与函数定义不一致的错误出现

    C++多个重载函数编译之后生成多个不同的目标代码段,从而实现静态编译连接;如果是生成一个目标代码段,则需要再连接进行动态查找。


    重载运算符:

    1.作为类成员函数

    2.作为类友元函数

    重载运算符的操作数和返回值形式:

    1.返回值形式:

    (a)const  Integer...{...return new Integer;}

    (b)const Integer&...{...return x;}//return计算之后重新赋值的参数

    2.操作数形式:

    (a)const  Integer&运算过程中不会改变的

    (b)Integer&运算过程中会发生改变的

    3.类成员函数本身类型:

    (a)非const类型,函数运算过程对象本身会改变

    (b)const类型,函数运算过程中对象本身不会改变


    附上美国著名软件公司M面试题目一道:

    int i=0;

    i+=i>0?i++:i--;//输出i为-1,与推算一致

    联想一题目:

    int  i=0;

    i+=i--;//推算为0,VS编译器下输出为-1,觉得很疑惑,求大神解决啊~!~

    展开全文
  • c++重载

    千次阅读 2012-08-24 16:27:33
     重载是一种是多态(如C++),有四种形式的多态:  1.虚函数多态  2模板多态  3重载  4转换  所谓的动态和静态区分是另一种基于绑定时间的多态分类,严格来说,重载是编译时多态,即...

    简介

      重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法

    编辑本段重载是不是多态?

    第一种说法

      重载是一种是多态(如C++),有四种形式的多态:
      1.虚函数多态
      2模板多态
      3重载
      4转换
      所谓的动态和静态区分是另一种基于绑定时间的多态分类,严格来说,重载是编译时多态,即静态多态,根据不同类型函数编译时会产生不同的名字如int_foo和char_foo等等,以此来区别调用。故重载仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于静态多态,而不是通过继承和虚函数实现的动态多态。

    第二种说法

      重载(overload)和多态无关,真正和多态相关的是覆盖(override)。
      当派生类重新定义了基类的虚拟方法后,基类根据赋给它的不同的派生类引用,动态地调用属于派生类的对应方法,这样的方法调用在编译期间是无法确定的。因此,这样的方法地址是在运行期绑定的(动态绑定)。
      重载只是一种语言特性,是一种语法规则,与多态无关,与面向对象也无关。
      不过针对所谓的第二种重载,有一个专门的名词--重写或重定义。重载与重写的区别就在于是否覆盖,重写一般多发生在不同的类且存在继承关系之间,而重载多是在一个类里或者一块代码段里。

    编辑本段详细解读

    函数重载

      1.》》函数名必须相同,返回值可以相同,也可以不同,但是特征标必须不同。是函数名来确定函数的不同,是特征标是函数可以重载。编译器首先选在函数名,然后再根据特征标在众多重载的函数中找到合适的。
      2.》》匹配函数时,编译器将不区分类型引用和类型本身,也不区分const和非const变量。(小注:因为这些在定义和声明时可能不同,但是在调用时都是一样的,编译器将无法区分)。但是值得注意的是,形参与const形参的等价性仅适于非引用形参。有const引用形参的函数与有非const引用形参的函数是不同的。类似的,如果函数带有指向const类型的指针形参,则与带有指向相同类型的非const对象的指针形参的函数不相同。
      3.》》名称修饰(name decoration)。编译器将根据原型中指定的形参对每个函数名进行加密。

    重载与重定义

      被重载的函数有不同版本,这些函数地位是一样的,可以根据特征标的不同选择不同的函数。被重定义的函数也有不同的版本,但是你不能随意选择,你只能选择最新的版本,被重定义多发生在类之间的继承里。
      4.》》函数会有那么多版本,那么编译将选哪一个呢。当然,理想情况是,实参与形参的数据类型完全匹配,但是当不完全匹配时会怎样呢?这就要牵扯到c++里复杂的类型转换了。
      在重载及函数模板重载里,编译器选择函数,要经过以下三步,这个过程称为重载解析。
      第一步:创建候选函数列表,其中包含有与被调函数名称相同的函数与模板函数。
      第二步:使用候选函数列表创建可行函数列表。这些都是参数数目正确的函数。
      第三步:确定是否有最佳可行的函数。如果有,则使用。
      确定最佳函数,只考虑其特征标,而不考虑返回类型(也无从考虑,但是要是硬想办法的话,也有,不过没有必要为了不必要的性能而浪费资源)。确定最佳函数,匹配特征标要依次经过以下判断:(1)完全匹配(常规函数优于模板;允许无关紧要的转换)(2)提升匹配(如char和short自动转换为int)(3)标准转换(int转换为char,long转换为double)(4)用户自定义的转换(如类声明中定义的转换函数)。
      完全允许无关紧要的转换,这些转换包括引用,指针与实体之间,数组与指针之间,函数与函数指针之间,const与非const等等。
      其次还要注意还要注意匹配的优先级。1,指向非const数据的指针和引用优先于const的指针和引用参数匹配(这种优先级只有当指针或引用出现时产生)。2,非模板函数,优于模板函数,显示具体化的模板将优于隐式具体化的模板,总之较具体的优先(注意,具体并不是由于显隐决定的,术语“最具体”是指编译器推断使用哪种类型时执行的转换最少)。

    C++中的重载

      函数重载:
      函数重载就是函数名称相同,但定义却不同。函数重载使得程序员可以将一系列的函数族定义为一个统一的界面,但是却可以处理不同类型数据或接受不同个数的参数。这实现了统一接口,不同定义的思想。
      流的重载:
      C++的流提取运算符>>和就插入运算符<<是C++类库提供的输入输出(I/O)操作符。系统与定义了输入流类istream和输出流类ostream,cin和cout分别是istream和ostream的对象。iostream头文件中已经对>>和<<进行了重载,使得它能用来输入/输出标准类型的数据。但如果是自己定义类型,就需要重载在这两个运算符,以便它们能输入/上岁数出该自定义类型。格式如下:
      流插入的重载:ostream &operator<<(ostream &,自定义类 &);
      流提取的重载:istream &operator>>(istream &,自定义类 &);
      运算符的重载:
      运算符的重载就是对运算符的重新定义,即一个运算符可以用于多种数据类型的运算中。运算符的重载在实际编程中使用很普遍,例如,“+”运算符既可以用于整数加,也可以用于浮点加,甚至是字符串的链接。格式如下:
      type operator sign (参数列表);
    展开全文
  • C++ 重载运算符和重载函数

    千次阅读 多人点赞 2019-01-28 10:24:12
    C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数...

    C++ 重载运算符和重载函数

    C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。

    重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

    当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。

    C++ 中的函数重载

    在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。

    下面的实例中,同名函数 print() 被用于输出不同的数据类型:

    实例

    #include <iostream>
    using namespace std;
     
    class printData
    {
       public:
          void print(int i) {
            cout << "整数为: " << i << endl;
          }
     
          void print(double  f) {
            cout << "浮点数为: " << f << endl;
          }
     
          void print(char c[]) {
            cout << "字符串为: " << c << endl;
          }
    };
     
    int main(void)
    {
       printData pd;
     
       // 输出整数
       pd.print(5);
       // 输出浮点数
       pd.print(500.263);
       // 输出字符串
       char c[] = "Hello C++";
       pd.print(c);
     
       return 0;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    整数为: 5
    浮点数为: 500.263
    字符串为: Hello C++
    

    C++ 中的运算符重载

    您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。

    重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。

    Box operator+(const Box&);
    

    声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:

    Box operator+(const Box&, const Box&);
    

    下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象的属性使用 this 运算符进行访问,如下所示:

    实例

    #include <iostream>
    using namespace std;
     
    class Box
    {
       public:
     
          double getVolume(void)
          {
             return length * breadth * height;
          }
          void setLength( double len )
          {
              length = len;
          }
     
          void setBreadth( double bre )
          {
              breadth = bre;
          }
     
          void setHeight( double hei )
          {
              height = hei;
          }
          // 重载 + 运算符,用于把两个 Box 对象相加
          Box operator+(const Box& b)
          {
             Box box;
             box.length = this->length + b.length;
             box.breadth = this->breadth + b.breadth;
             box.height = this->height + b.height;
             return box;
          }
       private:
          double length;      // 长度
          double breadth;     // 宽度
          double height;      // 高度
    };
    // 程序的主函数
    int main( )
    {
       Box Box1;                // 声明 Box1,类型为 Box
       Box Box2;                // 声明 Box2,类型为 Box
       Box Box3;                // 声明 Box3,类型为 Box
       double volume = 0.0;     // 把体积存储在该变量中
     
       // Box1 详述
       Box1.setLength(6.0); 
       Box1.setBreadth(7.0); 
       Box1.setHeight(5.0);
     
       // Box2 详述
       Box2.setLength(12.0); 
       Box2.setBreadth(13.0); 
       Box2.setHeight(10.0);
     
       // Box1 的体积
       volume = Box1.getVolume();
       cout << "Volume of Box1 : " << volume <<endl;
     
       // Box2 的体积
       volume = Box2.getVolume();
       cout << "Volume of Box2 : " << volume <<endl;
     
       // 把两个对象相加,得到 Box3
       Box3 = Box1 + Box2;
     
       // Box3 的体积
       volume = Box3.getVolume();
       cout << "Volume of Box3 : " << volume <<endl;
     
       return 0;
    }
    

    当上面的代码被编译和执行时,它会产生下列结果:

    Volume of Box1 : 210
    Volume of Box2 : 1560
    Volume of Box3 : 5400
    
    展开全文
  • C++重载函数与重载运算符

    千次阅读 2016-04-29 16:30:41
    C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的...

    C++ 重载运算符和重载函数

    C++ 允许在同一作用域中的某个函数运算符指定多个定义,分别称为函数重载运算符重载

    重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

    当您调用一个重载函数重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策

    C++ 中的函数重载

    在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。

    下面的实例中,同名函数 print() 被用于输出不同的数据类型:


    /*重载函数*/
    #include<iostream>
    using namespace std;
    
    class printxc
    {
    	public:
    		void print(int a)
    		{
    			cout<<"this is first:"<<a<<endl;
    		}
    		void print(double b)
    		{
    			cout<<"this is second:"<<b<<endl;
    		}
    		void print(char* c)
    		{
    			cout<<"this is third:"<<c<<endl;
    		}
    };
    
    int main()
    {
    	printxc sw;
    
    	sw.print(125);
    	sw.print(12.5);
    	sw.print("overloading");
    
    	return 0;
    }
    运行结果:

    this is first:125
    this second:12.5
    this is third:overloading

    C++ 中的运算符重载

    您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。

    重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。

    Box operator+(const Box&);

    声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:

    Box operator+(const Box&, const Box&);

    下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象的属性使用 this 运算符进行访问,如下所示:

    /*运算符重载,关键字operator*/
    #include<iostream>
    using namespace std;
    
    class xc
    {
    	public:
    		//获取长度
    		void setlen(double len)
    		{
    			length=len;
    		}
    		//获取宽度
    		void setwid(double wid)
    		{
    			width=wid;
    		}
    		//area计算函数
    		double getarea(void)
    		{
    			return length*width;
    		}
    		//重载+运算符,用于对象相加
    		xc operator+(const xc& sw)
    		{
    			xc xc1;
    			xc1.length=this->length+sw.length;
    			xc1.width=this->width+sw.width;
    			return xc1;
    		}
    	private:
    		double length;
    		double width;
    };
    
    int main()
    {
    	xc sw1;
    	xc sw2;
    	xc sw3;
    	double are=0.0;//初始化aera变量
    
    	//传值
    	sw1.setlen(1.5);
    	sw1.setwid(4.0);
    
    	sw2.setlen(2.5);
    	sw2.setwid(4.0);
    
    	//sw1 for area
    	are=sw1.getarea();
    	cout<<"are1="<<are<<endl;
    
    	//sw2 for area
    	are=sw2.getarea();
    	cout<<"area2="<<are<<endl;
    
    	//sw1+sw2
    	sw3=sw1+sw2;
    
    	//sw3 for area
    	are=sw3.getarea();
    	cout<<"area3="<<are<<endl;
    
    	return 0;
    }

    执行结果:

    area1=6
    area2=10
    area3=32

    可重载运算符/不可重载运算符

    下面是可重载的运算符列表:

    + - * / % ^
    & | ~ ! , =
    < > <= >= ++ --
    << >> == != && ||
    += -= /= %= ^= &=
    |= *= <<= >>= [] ()
    -> ->* new new [] delete delete []

    下面是不可重载的运算符列表:

    :: .* . ?:

    展开全文
  • C++ 重载运算符和重载函数C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数...
  • C++重载赋值运算符

    千次阅读 2017-11-18 23:41:30
    C++重载赋值操作符 1、C++中重载赋值操作函数应该返回什么?  类重载赋值操作符一般都是作为成员函数而存在的,那函数应该返回什么类型呢?参考内置类型的赋值操作,例如  int x,y,z;  x=y=z=15;  赋值...
  • C++ 重载函数匹配

    千次阅读 2015-07-20 22:43:06
    C++ 重载函数匹配规则
  • C++ 重载运算符 友元函数
  • c++ 重载类型转换运算符
  • c++重载++运算符 C ++中的运算符重载 (Operator Overloading in C++) Operator overloading is an important concept in C++. It is a type of polymorphism in which an operator is overloaded to give user ...
  • C++重载运算符的分析

    2019-01-22 14:23:04
    C++重载运算符的分析 一、重载运算符 重载运算符,顾名思意,其实就是把一种运算符重新定义成另外一种含义。举一个简单的例子,大家熟知的+这个运算符,应用在数学上,很好理解,但是如果有一个动物类,这个动物类的...
  • C++ 重载运算符(详)

    千次阅读 2016-11-17 22:59:33
    C++ 重载运算符C 重载运算符 一重载函数 1例程 2备注 二重载运算符 11 二元运算符重载 11 一元运算符重载 111 -- 2备注 3 特殊运算符重载 31 号运算符 32 下标运算符 32 括号运算符 三重载运算符之友元函数 例程 ...
  • C++ 重载赋值运算符

    千次阅读 2011-04-25 15:15:00
    C++ 重载赋值运算符
  • C++重载运算符

    2019-05-15 15:39:49
    ( 1 )C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 ( 2 ) 除了类属关系运算符 " . " 、成员指针运算符 " .* " 、作用域运算符 " :: " 、sizeof运算符和三目运算符 " ?:...
  • C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数...
  • 如果创建两个或多个成员(函数)具有相同的名称,但参数的数量或类型不同,则称为C++重载。 在C++中,我们可以重载:方法构造函数索引属性这是因为这些成员只有参数。C++中的重载类型有:函数重载运算符重载C++函数...
  • C++重载运算符实现矩阵的运算 #include <iostream> using namespace std; class calculate { private: int a[2][2]; int row,col; public: calculate(int ,int ); friend calculate operator+(calculate &...
  • C++重载机制

    千次阅读 2018-05-22 15:36:19
    原文地址:...本篇博客主要介绍C++中函数重载机制和运算符重载机制。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(...
  • C++重载相关面试问题

    2015-03-09 23:00:08
    C++重载相关面试问题 Table of Contents 1. 什么是重载,重载的定义是什么?2. 重载函数为什么不能返回值来区分?3. 重载(overload)与重写(override)的区别是什么?4. 什么是重定义(redefining)?5. 请写出...
  • c++重载小于号的时候,只要有等于的情况,也不能写true,只有小于是true,其他都得是false
  • C++ 重载解引用_迭代器

    千次阅读 2016-03-30 13:48:09
    C++ 重载解引用_迭代器
  • c++重载两个中括号[][]

    2017-04-10 05:34:14
    c++重载两个中括号[][],就像二维数组一样使用 直接重在不行,得怎么弄?
  • C++ 重载 数组对象输入输出流的实现!!! 重载 一个对于c++学习者,必备的技能。简单的来说就是让一些符号依据他们使用对象的不同具有更多重的作用,那为什么说数组的重载呢?,那是因为一下输出多个数组,是不是...
  • C++重载函数

    千次阅读 2017-06-20 21:12:15
    C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,即函数的参数列表不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载...
  • 摘要C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,713
精华内容 16,285
关键字:

c++重载

c++ 订阅