孙鑫VC++ 第三课 this指针的问题

孙鑫VC++深入详解:Lesson1 1. 开始我从MSDN 中copy WinMain原型时,搞错了 下面的代码编译是说 WinMain不能重载.....原来是参数不对. LPWSTR, 仔细宽字符串的指针,16位=2个字节=一个字word LPCWSTR--- Pointer to a constant null-terminated string of 16-bit Unicode characters. For more 阅读详情

最近看一个古老但经典的VC++视频,看到第三课的时候,遇到一个小小的比较特殊的问题,就是子类的对象调用父类时,在父类里的this指针指向的是子类的对象。逻辑上感到有点混乱,用一段代码加以验证。

#include <iostream.h>   
class PARENT{
	int d; 
	public:     
	PARENT()
	{         
 		d=1;           
        cout<<"PARENT this ="<<this<<endl;              
        cout<<"d="<<this->d<<endl;     
    }
};

class CHILD : public PARENT
{
	int b; 
	public:      
	CHILD():PARENT()
	{  
		b=2;  
		cout<<"CHILD this = "<<this<<endl;  
		cout<<"b="<<this->b<<endl;    
	}
};


int main(int argc, char* argv[]) 
{  
	CHILD cb;
	cout<<"CHILD object cb's addr is="<<&cb<<endl; 
	return 0;
} 


上面代码和孙鑫第三课中提到的this指针部分的MFC的代码原理一样!此代码运行的结果你会发现this的值都一样!而且this都是指向cb对象的!  因为this指针式在创建一个对象时,隐含的将对象的地址赋予一个指针,那就是this指针。在创建对象cb时,先讲cb的首地址赋给this,根据继承性,首先调用基类的构造函数,虽然此时cb对象还未完全创建(必须调用完子类的构造函数时,此时对象才会创建完毕),但是此时cb对象的基类部分已经构造完毕,所以这时候的this指针可以看成是cb的this指针,但是只能调用基类PARENT的数据成员。如果此时你在PARENT()里加上一句cout<<"b="<<this->b<<endl;让其调用子类的数据成员,则会报错!因为this指向的对象没有构造子类的部分!在执行完基类的构造函数进入子类的构造函数后,这时候this指向的对象构造完成,这时候this指针也就是一个真正的的指向cb的常指针了。

多思计算机组成原理实验:模型机课程设计 计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰 阅读详情

相关推荐

Auto.js凉了之后,我们该用啥?AutoX.js保姆级环境搭建与第一个脚本实战(2024最新)

本文详细介绍了AutoX.js作为Auto.js替代方案的环境搭建与脚本开发实战指南。从技术生态现状分析到2024最新环境配置,再到编写第一个实用脚本和进阶调试技巧,帮助开发者无缝迁移至AutoX.js平台。特别适合需要手机自动化的JavaScript开发者,涵盖从基础到企业级应用的全套解决方案。

weixin_28737073的博客 389

【汇编 C++】C++this指针、this指针长什么样?

this指针是“C++封装后的结构体或类中成员函数”的一个默认参数,用于存放当前结构体变量(类的对象)的首地址,它是一个隐藏的参数。概念听起来很模糊,不急,代码测试之后就能明白。{int a;int b;int c;};// 结构体的外部定义函数{}int main(){// 此处下断点,观察反汇编return 0;}我们先把函数定义在结构体的外部,现在的结构体就是个简单的结构体,没有进行封装,函数也是个简单的函数,没有this指针。

qq_52572621的博客 1081

土壤水动力学_前 言

Van Genuchten (V-G) 模型是土壤水分特征曲线中最常用的模型之一。它通过数学方程描述了土壤基质吸力与体积含水量之间的关系,被广泛应用于土壤水分运移、土壤盐渍化、边坡稳定性等研究领域。V-G模型是描述土壤水分特征曲线的重要工具,但它并不是完美的。在实际应用中,需要根据土壤类型、试验条件等因素选择合适的模型。土壤基质吸力是土壤水分学中的一个重要概念,它对土壤水分的保持、植物的生长以及土壤的工程性质都有重要影响。

weixin_44259522的博客 5327

关于this指针

                                  初学者对this指针真的是很好奇,因为它很神秘。其实,只要以平常心来看待,this就很平常了。1. this只能在成员函数中使用。全局函数,静态函数都不能使用this。实际上,成员函数默认第一个参数为T* const register this。如: class A{public: int func(int p){}}

computerart的专栏 1579

最优化理论与自动驾驶(三):LQR原理、公式及代码演示

LQR 是基于线性系统和二次型代价函数的最优控制方法,在实际工程应用中,我们一般采用离散时间系统的LQR设计,其目标是通过设计反馈控制律,使系统在离散时间步长内稳定运行,最小化某个二次型代价函数。给定一个离散时间系统,其状态和控制输入通过以下方程表示:是时刻k的系统状态,是时刻k的控制输入,是状态转移矩阵,是输入矩阵。系统描述的物理意义:系统状态通过矩阵A演变到下一时刻,同时控制输入通过矩阵B影响系统的状态。

a8598671的博客 4595

AgentScope Java 2.0 项目实战:使用AgentScope Builder 构建企业级多租户 AI Agent 平台

本文基于 AgentScope Builder 源码深度分析,系统讲解多租户 AI Agent 构建平台的完整开发流程。涵盖 Spring Boot 3.x + WebFlux 后端架构、React 18 + TypeScript 前端实现、HarnessAgent 运行时、CompositeFilesystem 多租户隔离、SSE 流式对话、6 种 IM 渠道接入(钉钉/飞书/企微/GitHub/GitLab)、Git 与 Nacos 技能市场、JWT 认证、Docker Sandbox 隔离等核心技术。

program哲学 721

VC++ 关于this指针

VC++中关于this指针介绍。

王学斌的博客 802

VMware Horizon 8 2111 部署系列(十一)准备RDS主机

RDS (Remote Desktop Service),即远程桌面服务。我们可以使用 Microsoft 远程桌面服务 (RDS) 提供 RDS 主机上的桌面会话并将应用程序传送给多个用户。

白昼的技术专栏 3469

VC++ this指针(Point函数中的成员变量对于是 函数void input(int x, int y)是不可见的)

#include <iostream> using namespace std; class Point { public: int x; int y; Point() { x = 0; y = 0; } Point(int a,int b) { x = a; y = b; } void input(int x, int y) { ...

m0_37135980的博客 373

手把手教你学SIMULINK模块库文件专栏--Scope 模块详解

模块是 Simulink 中的一个信号接收模块,用于实时显示信号波形。该模块可以捕捉并可视化仿真过程中信号的变化,帮助用户直观地分析系统的动态行为。模块都能提供强有力的支持。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常实用的工具,适用于需要实时显示信号波形的各种场景。模块的参数,可以进一步增强学习体验。模块参数的影响,下面我们将详细探讨每个参数如何影响波形显示。

MHD0815的博客 312

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5734

c++基础知识:this指针

this指针简介

qq_48335434的博客 4326

Linux系统故障排查思路实践教程(上)

本文主要介绍了Linux系统日志分析与常见故障排查的实用方法。首先从系统日志的分类及其涉及的日志文件进行说明;其次详细讲解了忘记用户密码的解决方案;接着对系统无法启动问题,提供了异常断电后修复文件系统、/etc/fstab文件丢失恢复等常见故障的处理方案。最后介绍了文件系统只读错误的排查思路和修复方法,包括磁盘空间检查、文件系统修复等实用技巧。全文提供了大量具体命令和操作流程,为Linux系统维护人员提供了实用的故障处理指南。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 328

孙鑫VC++讲座笔记

  孙鑫VC++讲座笔记-(2)C++(转) 1, c语言中,结构体struct中不能包括函数的,而在C++中struct中可以包括函数。2,C++中结构体和类可以通用,区别主

坚定的锡兵 2296

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

谈谈基类与子类的this指针(C++)

引入   定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数)。一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个对象的成员变量。而对于同一个类的每一个对象,都是共享同一份类函数。对象有单独的变量,但是没有单独的函数,所以当调用函数时,系统必须让函数知道这是哪个对象的操作,从而确定成员变量是哪个对象的。这种用于对成员变量归属对像进行

梧桐门的专栏 3398

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

孙鑫VC第三课学习笔记

孙鑫VC第三课学习笔记剖析基于MFC的应用程序知识点一MFC中是如何来对应传统的windows程序? 首先在CXXXApp中会定义一个全局变量 CXXXApp theApp我们知道,在C/C++中,编译器会在进入main/WinMain函数之前会给全局变量分配内存空间,所以在MFC中,首先会调用theAPP,当然会进入CXXXApp类的构造函数CXXXApp()。在VC

张戟的专栏-H.264学习乐园 6142

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

再谈this指针

      我们知道,一个类可以定义多个对象,但每个对象只能存储自己的数据成员,而成员函数的代码是共享的。当不同的对象调用同一个成员函数时,成员函数是如何区别不同的对象,从而进行正确的数据操作呢?      在C++的每个 类中,类为每个非静态成员函数提供了一个隐含的名字为this的指针,当进行成员函数调用时,系统自动将调用此成员函数的对象的地址作为一个隐含的参数传递给this指针,即是让th

hxb600的专栏 285

孙鑫vc++ 第二课 掌握c++

掌握C++主讲人:孙鑫C++的标准输入输出流 C++的特性结构体成员默认识公有的,类成员默认是私有的。?    构造函数1、构造函数的作用是对对象本身做初始化工作,也就是给用户提供初始化类中成员变量的一种方式,在类对象有虚表的情况下,构造函数还对虚表进行初始化。在类中定义成员变量的时候不能直接给成员变量赋值。2、如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函

happyhhb的专栏 1232

阅读笔记——第二章——《VC++深入详解》————孙鑫

【结构体与类】: 结构体默认情况下,其成员是公有(public)的; 类默认情况下,其成员是私有(private)的。在一个类当中,公有成员是可以在类的外部进行访问的,而私有成员就只能在类的内部进行访问。 【构造函数】: 如果一个类中没有定义任何构造函数,那么编译器只有在以下三种情况下,才会提供默认的构造函数: 1、如果类有虚拟成员函数或者虚拟继承父亲(即有虚拟基类)时; 2、

sweet_life的专栏 1554

孙鑫VC++ lession2 掌握C++

this-> 指针因为方法是在代码段中,对于所有的对象都只有一份拷贝所以在对象在方法调用中,隐含的都会传递一个this指针过去,来区别是那个对象调用的方法析构函数只有一种无参的~A() 在这里面调用对象的delete()方法来释放内存C++写类的时候class A{}; 后面的大括号要加;C++中 修饰符这样写,(好像没有类的修饰符)class A{public:  int x;protected:  int y;private:  int z;};#include class Animal{//C++中只

带发修行 383

深入理解this指针[转帖]

 源自《VC++深入详解》 作者:孙鑫、余安萍 编著源地址: 2.2.5  this指针我们再看例2-9所示的这段代码(EX04.CPP):例2-9#include class point{public:     int x;     int y;     point()     {          x=0;          y=0;

云寒水暖 681

《VC++深入详解》第三章74页的问题(孙鑫老师)

就《VC++深入详解》第三章74页的内容,视频中,孙鑫老师讲到(大意是),创建派生类对象的时候,基类构造函数中this是指的谁呢?是指的派生类对象!对此,胡乱写了个程序如下:(其中利用了虚函数的技术 ) #include <iostream>using namespace std; class base{public:int i;base();...

weixin_30337251的博客 108

this指针

孙鑫VC++教程,第三章中this指针 开始自己写错了,然后google得来一个此提问。 CTestAPP 由 CWinAPP 派生而来CWinApp::CWinApp(LPCTSTR lpszAppName) //带参数{ ...... pThreadState->m_pCurrentWinThread = this; //注意,这个this指针指向那个对象?是CWinA...

weixin_33720452的博客 91

孙鑫VC++Lesson2

第一个例子:#include class Point{public: int x; int y;/* void init() { x=0; y=0; }*/ Point() { x=0; y=0; } Point(int a,int b) { x=a; y=b; } ~Po

路径的专栏 669

孙鑫VC++讲座笔记(7) 对话框编程

1. Insert -->Resource --->Dialog------>New 新建一个对话框 2.在VC++ 中,一个窗口与一个C++ 类进行关联,对话框的基类为CDialog 类,对话框分为模态对话框与非模态对话框,模态对话框在应用程序能进行其它操作之前必须关闭,非模态的对话框允许不关闭对话框而进行应用程序操作.MSDN的说明:This class is the base c

greenerycn的专栏 1814
上一篇: 嵌入式研发人员的核心竞争力浅谈
下一篇: MFC中句柄和指针的区别
芯片之美
博客等级 码龄10年 33粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值