VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 865|回复: 2

不太理解,怎么获取的theApp的指针

[复制链接]
63_avatar_middle
最佳答案
0 
online_vip 发表于 2024-4-6 13:18:33 | 显示全部楼层 |阅读模式
本帖最后由 自强不息 于 2024-4-6 16:36 编辑

Base.h文件内容如下:

  1. #pragma once
  2. class Base
  3. {
  4. public:
  5.         Base();
  6.         ~Base();
  7. public:
  8.         virtual void InitABC();
  9. };
复制代码




Base.cpp文件内容如下
  1. #include "Base.h"
  2. #include "Glb.h"
  3. #include <stdio.h>

  4. Base::Base()
  5. {
  6.         p_glb= this;


  7. }


  8. Base::~Base()
  9. {

  10. }
  11. void Base::InitABC(){
  12.         printf("This is in Base.\n");

  13. }
复制代码
Derive.h文件如下
  1. #pragma once
  2. #include "Base.h"
  3. class Derive :
  4.         public Base
  5. {
  6. public:
  7.         Derive();
  8.         ~Derive();
  9. public:
  10.         void InitABC();
  11. };
复制代码

Derive.cpp文件如下

  1. <div>#include "Derive.h"
  2. #include <stdio.h>


  3. Derive::Derive()
  4. {
  5. }


  6. Derive::~Derive()
  7. {
  8. }



  9. Derive theApp;


  10. void Derive::InitABC(){
  11.     printf("This is in Derive.\n");

  12. }
  13. </div><div></div>
复制代码
Glb.h文件如下
  1. #pragma once
  2. #include "Base.h"

  3. extern Base*  p_glb;
  4. extern Base*  GlbGetApp();
复制代码
Glb.cpp文件如下
  1. #include "Glb.h"

  2. Base* p_glb = nullptr;

  3. Base*  GlbGetApp(){

  4.         return p_glb;


  5. }
复制代码
test文件如下
  1. #include <stdio.h>
  2. #include "Base.h"
  3. #include "Glb.h"
  4. #include <assert.h>

  5. int main(){
  6.        
  7.         Base* pWinApp = GlbGetApp();  //获取theApp指针
  8.         assert(pWinApp);
  9.         pWinApp->InitABC();

  10. }
复制代码

不太理解,这里的GlbGetApp()怎么获取到的theApp指针。
我的疑问是,GlbGetApp()获取到的不应该是Base类型的指针么,怎么变成Derive类型了呢?

恳请友友解答






上一篇:新人疑惑
下一篇:Windows资源管理器的状态栏的文本该怎么自定义?
63_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2024-4-6 16:25:35 | 显示全部楼层
好吧,问文心,有点明白了。
在C++中,this指针总是指向当前对象的实例。无论你是在基类还是派生类中访问this,它都指向调用它的那个对象。如果你在派生类中访问this,它指向派生类的实例;如果你在基类中访问this(比如在基类的成员函数中),并且这个函数是通过派生类对象调用的,那么this同样指向派生类的实例。

这是因为C++的继承机制保证了基类成员函数可以通过派生类对象来调用,并且这些成员函数可以通过this指针访问派生类对象的数据成员(包括从基类继承的和派生类新增的)。

举个例子:

cpp

  1. class Base {  
  2. public:  
  3.     Base() {  
  4.         cout << "Base constructor, this points to " << this << endl;  
  5.     }  
  6.     void printThis() {  
  7.         cout << "Base::printThis, this points to " << this << endl;  
  8.     }  
  9. };  
  10.   
  11. class Derived : public Base {  
  12. public:  
  13.     Derived() {  
  14.         cout << "Derived constructor, this points to " << this << endl;  
  15.     }  
  16. };  
  17.   
  18. int main() {  
  19.     Derived d; // 创建一个派生类对象  
  20.     d.printThis(); // 调用基类的成员函数  
  21.     return 0;  

  22. }
复制代码


在这个例子中,当你创建Derived类的实例d时,会先调用基类的构造函数,再调用派生类的构造函数。在这两个构造函数中,this都指向同一个对象,即d。当你调用d.printThis()时,尽管printThis是基类的方法,但是this指针仍然指向派生类Derived的实例d。


70_avatar_middle
最佳答案
0 
在线会员 发表于 2024-4-7 09:57:05 | 显示全部楼层
没看到p_glb赋值的地方,你给的代码应该是缺失的
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2024-5-25 15:59

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表