开发者社区> 问答> 正文

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

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

展开
收起
a123456678 2016-03-06 15:20:50 3445 0
1 条回答
写回答
取消 提交回答
  • 虽然语法上让你通过了,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

    2019-07-17 18:54:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载