开发者社区> 问答> 正文

为什么派生类的指针指向基类对象 还可以调用派生类的函数?

a123456678 2016-03-06 15:20:50 1266

想不明白啊,高手帮帮忙吧
Derived1 * hh = static_cast(new Base);
hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊??
而且即使derivedfunction里面用到派生类的私有成员也是可以的,
这到底是为什么啊???

分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 18:54:42

    虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结果是不对的,已经有问题了。

    class A
    {
    public:
        A() {};
        ~A() {};
    
    private:
        int a;
    };
    
    class B : public A
    {
    public:
        B() { b = 1;};
        ~B() {};
    public:
        void bFun() { std::cout << "B::bFun, b=" << b << std::endl; };
    private:
        int b;
    };
    
    int main()
    {
        B* b = static_cast<B*>(new A);
        b->bFun();
    }

    输出:
    B::bFun, b=7012548

    0 0
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章