美文网首页
C++类指针转换

C++类指针转换

作者: 雯饰太一 | 来源:发表于2023-06-07 08:07 被阅读0次

有如下代码:

class SimA{
public:
    SimA(){m_iA = 0;}
    ~SimA(){}
    void fun1(){ printf("simA:fun1\n");++m_iA;}
    int GetA(){return m_iA;}
private:
    int m_iA;
};

class SimB{
public:
    SimB(){m_iA = 0;};
    ~SimB(){}
    void fun2(){ printf("simB:fun2\n");}
    void fun1(){ printf("simB:fun1\n");++m_iA;}
    int m_iA;
};


//mian函数测试代码
SimA* sa = new SimA();
SimB* sb = (SimB*)sa;
sb->fun1();
printf("m_iA = %d\n",sa->GetA());

上述sb调用过程会进入自己函数的fun1中,最终sa的值将会发生修改,sa->GetA() == 1;上述代码语法正确,而且能够编译通过。

合理解释:

  • C++的每个类的函数在内存中都只在编译期有一份,而对象可以有多个,对象里面只包含类的成员变量,对象的不同体现在这些成员变量的不同
  • 当进行强制类型转换的时候,SimB类型的指针会将内存空间解释成自己需要的样子
  • 因为SimB和SimA有同名函数,且第一个成员变量都是int类型,在调用SimB::fun1的时候刚好可以对变量进行修改。

可以多做一些测试:

  • A类中多写几个成员变量,保证AB两类的变量顺序不同
  • A类中变量名略微调整后测试效果
  • B类中fun1函数添加上参数列表再进行调用测试

相关文章

  • C++类 --- 类型转换构造函数、运算符,类成员指针

    今天呢,和大家聊一聊C++中的类型转换构造函数、类型转换运算符(函数)以及类成员指针。简单的来讲,类型转换构造函数...

  • C++系列 --- 类型转换构造函数、运算符,类成员指针

    今天呢,和大家聊一聊C++中的类型转换构造函数、类型转换运算符(函数)以及类成员指针。 简单的来讲,类型转换构造函...

  • C++ 指向类的指针

    原文地址:C++ 指向类的指针 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成...

  • 类型转换

    隐式转换 整形提升数组转换成指针指针转换指向任意非常量的指针能转换成void * 转换成布尔类型 转换成常量 类类...

  • 1.2.09_C++ 指向类的指针

    C++ 类 & 对象 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算...

  • 关于基类与派生类指针的转换问题

    派生类指针强转基类指针 向上转换简单无门槛,直接通过dynamic_cast转换,见代码示例。 基类指针强转派生类...

  • static_cast/dynamic_cast/reinter

    static_cast 对类的指针只能转换有继承关系的类。对普通的指针来说只能在void*和其他指针之间转换。它还...

  • C++智能指针和四种转换

    1、智能指针 智能指针,无需手动释放内存 2、C++中的四种转换 const_cast 转换常量 static_c...

  • block底层浅谈

    函数指针是指向函数的指针变量。 C++里面的结构体相当于OC里面的类 类就有变量和方法 C++里面跟类名一样的方法...

  • dynamic_cast运算符

    将基类的指针或引用,安全的转换成派生类的指针和引用

网友评论

      本文标题:C++类指针转换

      本文链接:https://www.haomeiwen.com/subject/ojmredtx.html