函数调用运算符_new运算符调用构造函数 - CSDN
精华内容
参与话题
  • 函数调用运算符

    千次阅读 2018-03-22 10:39:21
    如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。请看下面代码://-----------main.cpp #include <iostream> #include <string> #include <math.h&gt...

              如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。请看下面代码:

    //-----------main.cpp
    #include <iostream>
    #include <string>
    #include <math.h>
    
    class X
    {
    public:
        int operator()(int val) const
        {
            return val < 0 ? -val : val;
        }
    };
    
    int main()
    {
        X xObj;
        int num = xObj(10);
        std::cout << "num = " << num << std::endl;
        std::cout << "Hello World!" << std::endl;
        return 0;
    }
    

    输出如下:

    num = 10
    Hello World!

    即使xObj是一个类对象,但是我们也能调用该对象。调用对象实际上是在运行重载的调用运算符。

    展开全文
  • 函数调用运算符 如果类重载了函数调用运算符则我们可以像使用函数一样使用该类的对象。 函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符。 struct absint { int operator()(int val) { ...

    函数调用运算符

    如果类重载了函数调用运算符则我们可以像使用函数一样使用该类的对象。

    函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符。

    struct absint {

    int operator()(int val)

    {

    return val < 0 ? -val : val;

    }

    };

    int x = -7;

    absint absobj;//含有函数调用运算符的对象

    int xu = absobj(x);

    cout << xu << endl;

     

     

    可调用对象

    调用形式:调用形式指明了调用返回的类型以及传递给调用的实参类型。

    一种调用形式对应一个函数类型。

    int(int, int)//一个函数类型,接受两个int,返回一个int

     

    不同类型可能具有相同的调用形式

    以下都共享了一种调用形式int(int,int)

    int add(int a, int b){return a+b;}//普通函数

    auto mod = [](int a, int b){return a%b;}//lambda表达式

    struct divide {

    int operator()(int a, int b) { return a / b; }

    };//函数对象类

     

    function类型

    function类型可以用来存储可调用对象的指针,定义在头文件functional中

    function<T> f:f是一个用来存储可调用对象的空function

    result_type:该function类型的可调用对象的返回类型

    argument_type:当T有一个或两个实参时定义的类型。如果T只有一个实参,则argument_type是该类型的同义词,如果T有两个实参,则first_argument_type和second_argument_type分别代表两个实参的类型。

    不能将重载函数的名字存入function类型对象中,可以使用函数指针或lambda

    function<int(int, int)> f;

    f = divide();

    cout << f(8, 2) << endl;

     

    function<int(int, int)>f2;

    f2 = [](int a, int b) {return a%b; };

    cout << f2(17, 10) << endl;

     

    function类型可以存放在容器中

    map<string, function<int(int, int)>> binpos = {

    {"%",divide() },

    {"+",[](int a, int b) {return a+b; } },

    };

    cout << binpos["+"](4, 5) << endl;

    cout << binpos["%"](18, 10) << endl;

     

    为了解决二义性,不要直接将函数的名字存入function中,最好是存储函数指针,或存入lambda表达式

    int(*fp)(int, int) = add;//add为一个函数名

    binpos.insert({ "+",fp });

    展开全文
  • 函数调用运算符笔记

    2019-10-01 22:39:15
    如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。 例子: struct absInt { int operator()(int val) const { return val < 0? -val:val; } }; 调用: int i = -42; ab.....

    参考:C++ Primer 5th P506.

    如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。 

    例子:

    struct absInt
    {
       int operator()(int val)     const {
         return val < 0? -val:val;
    }
    };

    调用:

    int i = -42; 
    absInt absObj;
    int ui = absObj(i) ; //将i传递给absInt.operator()

    即使absObj只是一个对象而非函数,我们也能调用该对象。 调用该对象实际上是在运行重载的调用运算符。

    函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符,彼此之间应该在参数数量或类型上有所区别。 

    如果类定义了调用运算符,则该类的对象称为函数对象。因为可以调用这种对象,所以我们说这些对象的"行为像是函数一样"。

    转载于:https://www.cnblogs.com/Shinered/p/10172996.html

    展开全文
  • c++ —函数调用运算符重载 前言 c++中提供了函数调用运算符“()”的重载,重载后和普通的函数调用极其相似 所以又被称为仿函数 仿函数的创建非常灵活,所以这里只用两个例子来说明一下 上代码 #include<...

    c++ —函数调用运算符重载

    前言

    c++中提供了函数调用运算符“()”的重载,重载后和普通的函数调用极其相似
    所以又被称为仿函数
    仿函数的创建非常灵活,所以这里只用两个例子来说明一下

    上代码

    #include<iostream>
    #include<string>
    using namespace std;
    
    
    //函数调用运算符重载也叫作仿函数
    class Print
    {
    public:
    	void operator()(string text)
    	{
    		cout << text << endl;
    	}
    };
    
    class Add
    {
    public:
    	int operator()(int a, int b)
    	{
    		int c = a + b;
    		return c;
    	}
    };
    
    void test01()
    {
    	Print p;
    	p("hello world");
    }
    
    void test02()
    {
    	Add a;
    	int ret = a(10, 20);
    	cout << ret << endl;
    
    	//匿名对象使用函数调用运算符重载
    	//匿名对象不需要建立具体对象,在函数使用完成后,系统会自动释放匿名对象
    	cout << Add()(10, 20) << endl;
    }
    int main()
    {
    	test01();
    	test02();
    	system("pause");
    	return 0;
    }
    
    展开全文
  • C++的运算符重载

    万次阅读 多人点赞 2019-05-02 10:12:54
    1.作为新手学习C++的运算符重载,首先应该了解C++的运算符重载有何现实意义? 之前已对多态性有了相关总结,得出结论:函数重载体现出多态性。实际上,运算符重载也体现出了多态性。在C++中我们定 义的int、float...
  • C++规定赋值运算符“=”只能重载为类的非静态成员函数,而不可以重载为类的友元函数。 不能重载为类的静态成员应该比较容易理解,因为静态成员函数是属于整个类的,不是属于某个对象的,它只能去操作类静态数据成员...
  • 参数类型: 大家都知道运算符重载函数的参数类型必须是引用类型,这是为什么呢。拿我们最常用的赋值运算符重载来说,如果参数类型不是引用类型...同理返回值类型也要是引用类型,因为调用赋值运算符重载函数时也会创建
  • Python里的运算符重载

    千次阅读 2014-03-31 17:02:17
    在python类里可以重写某些运算符的方法函数,例如+ 实际类里提供__add__这个钩子函数,当调用+加法运算时,实际是调用了__add__钩子方法函数,我们在类里可以重写这些钩子函数。 python里前后缀双下划线的方法...
  • C++中的赋值运算符重载函数(operator=)

    万次阅读 多人点赞 2019-08-30 17:01:24
    本文主要介绍C++中的赋值运算符重载函数(operator=)的相关知识。 1. 概述 1.1 why 首先介绍为什么要对赋值运算符“=”进行重载。某些情况下,当我们编写一个类的时候,,并不需要为该类重载“=”运算符,因为...
  • 重载函数调用运算符:()

    千次阅读 2016-03-21 11:50:22
    如果类重载了函数调用运算符(),则我们可以像使用函数一样使用该类的对象。因为这样的类同时也能存储状态,所以与普通函数相比它们更加灵活。  下面这个名为absInt的struct含有一个调用运算符,改运算符负责返回其...
  • 可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real。上节中...即通过对象c1调用运算符重载函数,并以表达式中
  • 因为必须通过类的对象去调用该类的成员函数,而且只有运算符重载函数和返回值类型相同,运算结果才有意义。 1.2将双目运算符重载为友元函数时,在形参表列中必须有两个参数,不能省略,形参的顺序任意。 1.3在使用...
  • C++_运算符重载

    万次阅读 多人点赞 2011-07-23 12:07:25
    什么是运算符的重载? 运算符与类结合,产生新的含义。 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数...方式:类的成员函数 或 友元函数(类外的普通函数)规则:不能重载的运算符有 . 和 .*
  • matlab之调用函数(三)

    千次阅读 2019-02-24 13:08:24
    1 . 示例1 注意: ...在命令运算符中输入参数并调用函数得结果如下 2. 示例2 在命令运算符中输入参数调用函数得到结果。 注意:下面为之前调用函数的错误理解: 错误提示结果 ...
  • C++运算符重载讲解与经典实例

    万次阅读 多人点赞 2010-08-31 14:05:00
    C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex {  public:  complex(double r=0.0,double ...
  • 运算符函数区别

    千次阅读 2016-09-15 16:08:49
    在c++中,运算符函数有什么区别? 首先看下运算符的定义: 函数类型 operator 运算符(形参表)  {   函数体; {  譬如++运算符的重载为: class lei{ friend lei operator++(const lei& ); ...
  • java运算符重载

    万次阅读 2014-06-18 15:39:22
    在C++中,经常会运用到运算符的重载,
  • 如果基类中重写了赋值运算符重载函数,派生类中没有重写的话,那么当用派生类调用赋值运算符时,基类的运算符重载函数会被调用,而且派生类的成员也会进行赋值。  如果基类中重写了赋值运算符重载函数,派生类中也...
  • 运算符重载函数作为类成员函数与友元函数
  • C++学习笔记:(四)运算符重载 & 类型转换

    千次阅读 多人点赞 2020-05-26 16:20:49
    目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载...运算符重载是另一种调用函数的方法,是指同样的运算符可以施加于不同类...
1 2 3 4 5 ... 20
收藏数 256,914
精华内容 102,765
关键字:

函数调用运算符