C++之全局函数和成员函数互相转换
解析:成员函数会用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++之全局函数和成员函数互相转换的更多相关文章
- golang写业务代码,用全局函数还是成员函数
在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...
- C++基础 (4) 第四天 this指针 全局函数和成员函数 友元 操作符重载
1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; c ...
- c++-变量,this指针,全局函数,成员函数,自定义数组类
区分变量属于哪个对象 c++对象管理模型初探 C++类对象中的成员变量和成员函数是分开存储的,C中内存四区仍然有效 C++编译器对普通成员函数的内部处理(隐藏this指针) this指针解决函数形参和 ...
- C++ 1//设计立方体类 //创建立方体的类 //设计属性和行为 //获取立方体的面积和体积 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等
1 //设计立方体类 2 //创建立方体的类 3 //设计属性和行为 4 //获取立方体的面积和体积 5 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等 6 #include <i ...
- C++(三十三) — 全局函数、成员函数的区别
区别: (1)全局函数的参数个数,比局部函数要多一个: (2)二者都可,返回元素.返回引用. class test { public: test(int a, int b) { this->a ...
- 全局函数VS成员函数
#include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a ...
- C++多态实现(虚函数,成员函数覆盖、隐藏)
// 1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace ...
- C++走向远洋——34(友元函数,成员函数和一般函数的区别)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:youyuan.cpp * 作者:常轩 * 微信公众号:Worl ...
- C++虚函数和成员函数内存 this指针问题
father* p=new son; p->disp(...); 发现有好多人this指针的本质有错误的认识,估计不少人一说起this指针,脑袋立即反应出:那个类里使用的this指针,那么这个指 ...
随机推荐
- 使用cacheBuilder实现函数防抖
在接口中出现的相同请求重复且连续发送的情况导致一些业务BUG,需要在接口上实现防抖 使用google的cacheBuilder import com.google.common.cache.Cache ...
- hdu 4432 数学杂题
http://acm.hdu.edu.cn/showproblem.php?pid=4432 6分钟写的代码,一上午去调试,, 哎,一则题目没看懂就去写了,二则,哎,,恶心了.在坚持几天然后ACM退役 ...
- Unix系统介绍
一.基础知识 操作系统 用户与计算机硬件之间的界面,是控制.管理计算机内各种硬件与软件资源.它是一个多用户.多任务.分时的操作系统. 对于分时系统:假如a进程需要16个时间片,现在根据优先级只分配了1 ...
- Python之Pandas库常用函数大全(含注释)
前言:本博文摘抄自中国慕课大学上的课程<Python数据分析与展示>,推荐刚入门的同学去学习,这是非常好的入门视频. 继续一个新的库,Pandas库.Pandas库围绕Series类型和D ...
- 10个必需的iOS开发工具和资源
本文转载至 http://mobile.51cto.com/iphone-418166.htm 界面总不是一件很容易事,尤其是iPhone/iPad的界面,做过iOS开发的程序员,一定会感到开发iPh ...
- 【BZOJ4668】冷战 并查集
[BZOJ4668]冷战 Description 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺 ...
- c# 委托 Predicate的使用示例
一.说明 委托Predicate 可以有参数(比如下面的示例),也可以不带参数,委托Predicate是返回固定值bool值的委托 二.示例代码(控制台程序) using System; using ...
- Linux就该这么学--命令集合5(用户与组管理命令)
1.useradd命令用于创建新用户:(useradd [选项] 用户名) 附录: -d 指定用户的家目录 -D 展示默认值 -e 账号有效截止日期,格式:YYY-MM-DD -g 指定一个初始用户组 ...
- 11、JavaScript 比较和逻辑运算符
- Mongoose学习(2)
1.Schema的扩展 UserSchema.methods.findUserName = function(cb){ return this.model('user').find({username ...