首页 > 编程语言 >C++类模型漫谈(二)

C++类模型漫谈(二)

时间:2022-10-19 13:23:02浏览次数:65  
标签:obj 函数 模型 漫谈 TypeA C++ a1 20 Method

系统基于32位,MSVC编译器,VS开发工具

1、通过对象对成员函数的调用,默认会给参数传进去一个this指针,该指针为对象的首地址,这个过程通常被编译器隐藏起来了。

对象直接调用成员函数,编译器在编译器就会直接获取到函数地址,汇编语言生成的就是call 函数地址,会有一个寄存器(很多情况是ECX)保存对象的地址,也就是相当于源码中的this指针。

函数代码里面可以直接通过该this指针(寄存器+成员偏移)访问到成员数据。这种调用属于直接函数调用,静态绑定行为。

class TypeA {
public:
	char a1 = 10;
	int a2 = 20;
	void TypeA_Method() {
		this->a1 = 20;
		a1 = 20;//这两种方式一样的,实际这个也会转换成上面的形式使用
	}
};
void TypeA_Method(TypeA* thisptr) {
	thisptr->a1 = 20;
}
int main()
{   
	TypeA a_obj;
	a_obj.TypeA_Method();//a_obj对象调用TypeA_Method函数,相当于下面的写法
	TypeA_Method(&a_obj);
	return 1;
}

2、通过类型的对象直接调用成员函数,不受继承,虚函数,是否重写过的影响,都是很简单的调用该类型中的成员函数,编译器都是直接生成了call 函数地址,属于静态绑定。

class TypeA {
public:
	char a1 = 10;
	int a2 = 20;
	void virtual TypeA_Method() {
		this->a1 = 20;
	}
};
class TypeB :public TypeA {
public:
	char b1 = 30;
	int b2 = 40;
	void virtual TypeA_Method() { //重写了TypeA中的成员函数
		this->a1 = 40;         
	}
};
int main()
{   
	TypeA a_obj;
	TypeB b_obj;
	a_obj.TypeA_Method();//执行TypeA中的TypeA_Method函数

	TypeA a2_obj= b_obj;
	a2_obj.TypeA_Method();//同上个函数一模一样,不会调用重写的那个函数

	return 1;
}

标签:obj,函数,模型,漫谈,TypeA,C++,a1,20,Method
From: https://www.cnblogs.com/fuyun2000/p/16803904.html

相关文章

  • c++中正确编写包含类的头文件
         ......
  • [原创]一款基于Reactor线程模型的java网络爬虫框架
    AJSpridergithub:​​https://github.com/zhuchangwu/AJSpider​​概述AJSprider是笔者基于Reactor线程模式+Jsoup+HttpClient封装的一款轻量级java多线程网络爬虫框架,简......
  • C/C++ 毫秒时间戳
    记录一下,方便取用#include<thread>#ifdef_WIN32#include<Windows.h>constchar*timenow(){staticthread_localcharstr[32];SYSTEMTIMEst;GetL......
  • 【C++】GoogleTest进阶之gMock
    gMock是什么当我们去写测试时,有些测试对象很单纯简单,例如一个函数完全不依赖于其他的对象,那么就只需要验证其输入输出是否符合预期即可。但是如果测试对象很复杂或者依赖......
  • c++'s shift operator >> and <<
    theuseofthec++'sshiftoperator<<andthe>>wherewecanuse?->wecanuseittorepresentthe1k,1M,orthe1G,thatisveryuseful;->wecanuseit......
  • 2021ICPC沈阳站 J Luggage Lock 思路以及C++实现
    题目JLuggageLock思路我们可以将密码锁的每一个状态看成一个节点,每一个操作看成从一个节点到另一个节点的权重为1(意思是经过一次操作)的有向边,这个问题就可以看成一个......
  • 深度学习模型部署:落实产品部署前至关重要的一件事!
    作者:Edison_G前段时间,”计算机视觉研究院“推出一期专门说部署模型的专题,今天我来和大家说说部署模型前的一件重要事情,那就是训练,如何加速训练也是一件不可忽略的流程,今天技......
  • C++类模型漫谈(一)
    系统基于32位,MSVC编译器,VS开发工具1、一个简单的类型TypeA,类型对象a_obj总共占8个字节。char类型a1占1个字节,但是为了考虑到32位系统存储效率,所以a1变量后面会分配3个字节......
  • C++中pair的用法
    https://blog.csdn.net/EmSoftEn/article/details/50587276?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ER......
  • 建立KS评估模型
    导入资源包fromsklearn.linear_modelimportLogisticRegressionimportpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsim......