zoukankan      html  css  js  c++  java
  • 对C++保护继承的访问控制进行验证

    郑莉<C++语言程序设计(第四版)>P262在介绍保护继承时提到:

    "注意:如果B是A的派生类,B的成员函数只能通过B的对象访问A中定义的protected成员,而不能通过A的对象访问A 的protected成员."



    课本源程序

    (郑莉<C++语言程序设计(第四版)>P262)

    #include <iostream>
    using namespace std;
    
    class A {
    protected:
        int x;
    };
    
    
    class B: public A {
    public:
         int function() ;
    };
    int B::function() {
        return x=5;
    }
    
    
    int main(int argc, const char * argv[]) {
        B b;
        cout<<b.function()<<endl;
        return 0;
    }


    现修改代码并进行验证:

    编译环境及编译器为





    运行结果为5:




    现修改代码进行验证:

    修改一:

    源代码及运行结果:

    #include <iostream>
    using namespace std;
    
    class A {
    public:
        int functions() {
            return x=3;
        }
    protected:
        int x;
    
    };
    
    class B: public A {
    public:
         int function(B &p) ; //修改处
    };
    int B::function(B &p) {   //修改处
        return p.x=5;         //修改处
    }
    
    int main(int argc, const char * argv[]) {
        B b;   
        cout<<b.function(b)<<endl;
        return 0;
    }
    



    编译成功,运行结果与课本代码一致,为5.

    修改二:

    源代码及运行结果


    #include <iostream>
    using namespace std;
    
    class A {
    public:
        int functions() {
            return x=3;
        }
    protected:
        int x;
    };
    
    
    class B: public A {
    public:
         int function(A &p) ;  //修改处
    };
    int B::function(A &p) {    //修改处
        return p.x=5;          //修改处
    }
    
    int main(int argc, const char * argv[]) {
        B b;    
        cout<<b.function(b)<<endl;  
        return 0;
    }




    编译器报错,并提示:"x"is protected member of "A".由此即验证:

    如果B是A的派生类,B的成员函数只能通过B的对象访问A中定义的protected成员,而不能通过A的对象访问A 的protected成员.


    作者:
    出处:http://www.cnblogs.com/ChenYilong/(点击RSS订阅)
    本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    拦截器-监听器-过滤器的区别
    实例Rest风格+SpringMVC+中文乱码解决
    Nginx功能详细介绍(大而全)
    Nginx应⽤场景之反向代理
    SpringMVC参数传递之日期类型
    SpringMVC请求参数绑定回顾
    数据输出机制之Model、Map及ModelMap回顾
    ReactHook快速上车
    Chrome性能调优技巧
    移动端适配的最佳实践
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/2808627.html
Copyright © 2011-2022 走看看