c++代码赏析之类对象传參

#include <iostream>

using namespace std;

class A
{
private:
    int x;

public:
    A():x(0) { x = 0; cout << "construct" << endl; }
    A(const A &a) { x = a.x; cout << "construct copy" << endl; }
    ~A(){ cout << "destruct" << endl; }

    // A operator()(int rhs)
    A& operator()(int rhs)
    {
        x += rhs;
        return *this;
    }

    int getX()
    {
        return x;
    }
};

void main()
{
    {
        A a;

        cout << a(1)(2)(3).getX() << endl;
        cout << a.getX() << endl;
    }
}

本段代码展示的内容包含:

+ 引用传參

+ 类型对象传參

+ 重载操作符连续调用

在定义A& operator()(int rhs)函数类型声明的情况下,中间不会有新对象。每次操作的均是同一个对象,所以最后输出为:

而在定义A operator()(int rhs)函数类型声明的情况下。中间会产生新的匿名对象,而且自己主动调用的是拷贝构造函数,打印construct copy。

最后输出为

反复调用重载操作的技巧在于返回类型是原类型的引用。

这个技巧能够用来实现对路径的递归訪问,实现之前一篇博文的想法:http://blog.csdn.net/lonelyrains/article/details/45093007

时间: 2024-08-02 06:58:54

c++代码赏析之类对象传參的相关文章

c++代码赏析之类对象传参

#include <iostream> using namespace std; class A { private: int x; public: A():x(0) { x = 0; cout << "construct" << endl; } A(const A &a) { x = a.x; cout << "construct copy" << endl; } ~A(){ cout <&

传參数与传实体、返回实体与返表——三层架构登录实例

用三层做窗口登录实例,与曾经做的<机房收费系统>相比,除了引入分层的理念外,最大的改观就是数据的传递由传參升级成了传实体,而查询数据库的返回结果也有了返回实体与返表的选择 传參数与传实体 窗口登录实例的的UI层是接收用户操作的最外层,数据经它转交给BLL层,如今先看下我们用以往传參数的方式,来编写的登录buttonclick事件 通过參数传递乍看起来清晰易读,可是这种程序耦合度太高,会为以后的数据变动和维护埋下隐患.比如,须要传递的数据添加了一个ID,user=mgr.SelectUserLo

STL算法设计理念 - 函数对象和函数对象当參数和返回值

函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)"的方式使用一个类对象,假设没有上下文,全然能够把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中.函数对象被广泛地使用以获得弹性".标准库中的非常多算法都能够使用函数对象或者函数来作为自定的回调行为: demo #include <iostr

详解~实现Runnable方法创建线程之为什么要将Runnable接口的子类对象传递给Thread的构造函数

/** * @author zhao * @TIME 0419 22:56  End *定义线程的第二种方法:实现Runnable接口 *步骤:1,定义一个子类实现Runnable接口 *    2,在子类中覆盖run()方法,并且将多线程锁执行的代码写入run方法中 *    3,通过Thread类建立线程对象: *    4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数.  为什么要将Runnable接口的子类对象传递给Thread的构造函数.  因为,自定义的

jquery和highcharts折线图、柱形图、饼状图-模拟后台传參源代码

js代码: <script type="text/javascript"> $(function(){ showLine(); showColumn(); showPie(); }); function showPie(){ jQuery.ajax({ type: "get", url: "csylLine.json", async: false, dataType: "json", success:functio

datasnap远程方法支持自定义对象传参

有同仁需要远程方法传输自定义的数据类型,他以为要自己写代码会很复杂,其实DATASNAP早就为我们想到了. datasnap的数据序列和还原真是无与伦比的强大,其远程方法支持自定义对象传参,DATASNAP会自动使用JSON序列和还原自定义的对象. 1)自定义一个对象 type TMyInfo = class(TObject) public AccountNo: string; SQL: string; Params: string; RecsMax: Integer; end; 2)服务端远程

js date对象传参获取特定日期的时间戳

当我们想要通过js获取某一特定时间的时间戳时,会通过给date对象传参再通过getTime函数来获取,传递的参数格式也有不同形式.有些时候,可能会因为自己传入参数的格式不正确而导致date对象invalid,进而导致逻辑出现错误. date对象传递的参数主要有字符串以及年月日等的数字,如下: new Date( year, month, date, hrs, min, sec) 参数说明: year的值为:需设定的年份-1900.例如需设定的年份是1997则year的值应为97,即1997-19

html传參中?和&amp;amp;

<a href="MealServlet?type=findbyid&mid=<%=m1.getMealId()%> 在这句传參中?之后的代表要传递的參数当中有两个參数第一个为type第二个为mid假设是一个參数就不用加&假设是多个參数须要加上&来传递 html传參中?和&,布布扣,bubuko.com

Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据. 语法: CURSOR  游标名  [ (参数名  数据类型,参数名 数据类型,...)]  IS  SELECT   语句; 例如:cursor c1 is select ename from emp; 游标