zoukankan      html  css  js  c++  java
  • [疑问]C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?

    class Base
    {
    protected:
     Base(){}
     ~Base(){}
    public:
     virtual void print()
     {
      cout<<"Base::print()!"<<endl;
     }
    };
    class Derived:public Base
    {
    public:
     Derived(){}
     ~Derived(){}
    private:
     void print()
     {
      cout<<"Derived::print()!"<<endl;
     }
    };
    int main(int argc,char*argv[])
    {
     Derived d;
     Base *pB = &d;
     pB->print();
     return 0;
    }

    问题补充:

    结果输出的是  Derived::print()!
    visual studio 2008测试  问题是如果derived类以拷贝构造函数给base那么pB是指向derived 问题是在类外怎么能访问私有成员函数呢?

    回答:
    这没错啊,print是一个虚函数,pB指向都内容是Derived,所以 pB->print() 调用的是Derivied::print()。
    至于private的问题,因为pB是指向Base的指针,调用Base的private函数是可以的(只不过Base::print()那个虚函数指针的内容是 Derivied::print()).
  • 相关阅读:
    flex 自定义事件
    ssis 不停执行的方法
    动态修改大小的Panel用户控件
    ssis 写文件到数据库
    sqlserver CheckSum
    poj1423
    poj1860
    poj1862
    poj1426
    poj1234
  • 原文地址:https://www.cnblogs.com/carbs/p/2435261.html
Copyright © 2011-2022 走看看