解析:成员函数会用this指针自动隐藏第一个操作数(左操作数)

1、把全局函数转化成成员函数,通过this指针隐藏左操作数。

  Test add(Test &t1,Test &t2)     ==>    Test add(Test & t2);

2、把成员函数转化成全局函数,多了一个参数

  vpid printAB()      ==>      void printAB(Test *pthis);

3、函数返回元素和返回引用

 Test &add(Test &t2)//*this //函数返回引用
  {
    this->a = this->a+t2.getA();
    this->b = this->b+t2.getB();
    return *this;//操作让this指针回到元素状态
  }
  Test add2(Test &t2)//*this //函数返回元素
  {
    //t3是局部变量
    Test t3(this->a+t2.getA(),this->b+t2.getB());
    return t3;
  }

函数返回元素,实例代码:

#include<iostream>
using namespace std; class Test
{
public:
int a;
int b;
public:
~Test()
{
cout << "析构函数:" << "a:" << a << "b:" << b <<endl;
}
Test TestAdd(Test &t2)
{
Test tmp(this->a+t2.a,this->b+t2.b);
return tmp;
}
Test(int a=0,int b=0)
{
this->a = a;
this->b = b;
}
void printT()
{
cout << "a:" << a << "b:" << b <<endl;
}
} //把成员函数 转成 全局函数 多了一个参数
void printT(Test *pt)
{
cout << "a:" << pt->a << "b:" << pt->b <<endl;
}
//全局函数的方法
//全局函数 转成 成员函数 少了一个参数
Test TestAdd(Test &t1,Test &t2)
{
Test tmp;
return tmp;
} int main()
{
Test t1(1,2);
Test t2(3,4); Test t3;
//全局函数方法
t3 = t1.TestAdd(t2); //成员函数方法
{
Test t4 = t1.TestAdd(t2);//匿名对象直接转化为t4
t4.printT();
Test t5;
t5 = t1.TestAdd(t2);//匿名对象复制给t5
t5.printT();
} return 0;
}

  

函数返回引用,实例代码:

#include<iostream>
using namespace std; class Test
{
public:
int a;
int b;
public:
~Test()
{
cout << "析构函数:" << "a:" << a << "b:" << b <<endl;
}
//t1.TestAdd(t2)
//返回一个引用,相当于返回自身
//返回t1这个元素,this就是&t1
Test& TestAdd(Test &t2)
{
this->a=this->a+t2.a;
this->b=this->b+t2.b;
return *this;//*(&t1)又回到了t1元素
} Test(int a=0,int b=0)
{
this->a = a;
this->b = b;
}
void printT()
{
cout << "a:" << a << "b:" << b <<endl;
}
} //把成员函数 转成 全局函数 多了一个参数
void printT(Test *pt)
{
cout << "a:" << pt->a << "b:" << pt->b <<endl;
}
//全局函数的方法
//全局函数 转成 成员函数 少了一个参数
Test TestAdd(Test &t1,Test &t2)
{
Test tmp;
return tmp;
} int main()
{
Test t1(1,2);
Test t2(3,4); //t1=t1+t2;
t1.TestAdd(t2);
t1.printT(); return 0;
}

  

C++之全局函数和成员函数互相转换的更多相关文章

  1. golang写业务代码,用全局函数还是成员函数

    在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...

  2. C++基础 (4) 第四天 this指针 全局函数和成员函数 友元 操作符重载

    1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; c ...

  3. c++-变量,this指针,全局函数,成员函数,自定义数组类

    区分变量属于哪个对象 c++对象管理模型初探 C++类对象中的成员变量和成员函数是分开存储的,C中内存四区仍然有效 C++编译器对普通成员函数的内部处理(隐藏this指针) this指针解决函数形参和 ...

  4. C++ 1//设计立方体类 //创建立方体的类 //设计属性和行为 //获取立方体的面积和体积 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等

    1 //设计立方体类 2 //创建立方体的类 3 //设计属性和行为 4 //获取立方体的面积和体积 5 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等 6 #include <i ...

  5. C++(三十三) — 全局函数、成员函数的区别

    区别: (1)全局函数的参数个数,比局部函数要多一个: (2)二者都可,返回元素.返回引用. class test { public: test(int a, int b) { this->a ...

  6. 全局函数VS成员函数

    #include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a ...

  7. C++多态实现(虚函数,成员函数覆盖、隐藏)

    // 1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace ...

  8. C++走向远洋——34(友元函数,成员函数和一般函数的区别)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:youyuan.cpp * 作者:常轩 * 微信公众号:Worl ...

  9. C++虚函数和成员函数内存 this指针问题

    father* p=new son; p->disp(...); 发现有好多人this指针的本质有错误的认识,估计不少人一说起this指针,脑袋立即反应出:那个类里使用的this指针,那么这个指 ...

随机推荐

  1. 解决Sophos UTM 9防火墙上的“根分区填满”问题

    Resolving 'Root Partition Is Filling Up' Issue on Sophos UTM Firewall 收到“Sophos UTM 9”防火墻的“根分區填满”问题的 ...

  2. cache数据库之表的存储结构

    1.我们已经建了一个person类,接下来就是表的存储结构 2.打开Inspector,先输入rowid名字为p_RowID,选class->Storage 3.新建一个Storage,选择Ca ...

  3. 蜗牛—Android基础之button监听器

    XML文件中有一个textView 和 一个button. <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...

  4. 前端学习——使用Ajax方式POST JSON数据包

    0.前言     本文解释怎样使用Jquery中的ajax方法传递JSON数据包,传递的方法使用POST(当然PUT又有时也是一个不错的选择).POST JSON数据包相比标准的POST格式可读性更好 ...

  5. MySQL 建立外键约束

    http://www.jzxue.com/shujuku/mysql/201109/06-8742.html MySQL 建立外键约束的语法太晦涩难懂了, 不得不记下笔记. 1. 在建表时建立外键 C ...

  6. ios文件系统文件目录操作

    对于一个运行在iPhone得app,它只能访问自己根目录下得一些文件(所谓sandbox). 一个app发布到iPhone上后,目录结构如下: 1.其中获取 app root 可以用 NSHomeDi ...

  7. FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块(转)

    1.Nginx的FastDFS模块什么作用? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过 FastDFS的HTT ...

  8. angular 指令封装弹出框效果

    就直接用bs的警告框啦~,Duang~ 功能 可以设置message和type,type就是bs内置的几种颜色 默认提示3秒框自动关闭,或者点击x号关闭 代码 模板 <div class=&qu ...

  9. 文件共享和使用 dup 函数创建新描述符的区别

    前言 文件共享是指同时打开一个文件 用 dup 函数能对指定文件描述符再创建一个新的描述符,且这个新的描述符和旧的描述符指向的是同一个文件. 这两种行为有什么区别呢?下面给出的两张文件系统的图形象的解 ...

  10. 【BZOJ3162】独钓寒江雪 树同构+DP

    [BZOJ3162]独钓寒江雪 题解:先进行树hash,方法是找重心,如果重心有两个,则新建一个虚点将两个重心连起来,新点即为新树的重心.将重心当做根进行hash,hash函数不能太简单,我的方法是: ...