C++类静态对象的问题

阿尔博特 2017-07-12 03:09:41

#include <iostream>
using namespace std;

class Base
{
public:
Base()
{
m_p = this;
}
virtual void func() { m_p->print(); }

virtual void print() { cout << "Base" << endl; }

static Base* m_p;
};

Base * Base::m_p = NULL;

class Derive : public Base
{
public:
void print() { cout << "Derive" << endl; }
};

int main()
{
Base * pDerive = new Derive;
Base * pBase = new Base;
pBase->func();
pDerive->func();
return 0;
}

打印
Base
Base
如果
int main()
{
Base * pBase = new Base;
Base * pDerive = new Derive;
pBase->func();
pDerive->func();
return 0;
}
这样写打印
Derive
Derive
为什么会结果不一样
...全文
217 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2017-07-12
  • 打赏
  • 举报
回复
Base * pBase = new Base; Base * pDerive = new Derive; 这两句先后顺序变一下,那就打印base了
Van_Le 2017-07-12
  • 打赏
  • 举报
回复
引用 楼主 jackhanzy 的回复:

#include <iostream>
using namespace std;

class Base
{
public:
    Base()
    {   
        m_p = this;
    }   
    virtual void func() { m_p->print(); }

    virtual void print() { cout << "Base" << endl; }

    static Base* m_p;
};

Base * Base::m_p = NULL;

class Derive : public Base
{
public:
    void print() { cout << "Derive" << endl; }
};

int main()
{
    Base * pDerive = new Derive;
    Base * pBase = new Base;
    pBase->func();
    pDerive->func();
    return 0;
}
打印 Base Base 如果 int main() { Base * pBase = new Base; Base * pDerive = new Derive; pBase->func(); pDerive->func(); return 0; } 这样写打印 Derive Derive 为什么会结果不一样
m_p是静态变量,所有的类中只含有一个该对象,每次创建新的对象时m_p=this都要执行一遍,所以最后的结果取决于,最后一次是哪个类。换句话说,最后一次创建的类,决定m_p的类型。
幻夢之葉 2017-07-12
  • 打赏
  • 举报
回复
class Derive : public Base { public: //少了virtual关键字 virtual void print() { cout << "Derive" << endl; } };

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧