• 对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订阅)
    本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    camke中关于变量的一些知识
    ububtu16.04下安装protobuf
    ububtu下安装配置搜狗输入法
    anaconda资源链接
    把本地项目文件上传到github远程仓库的教程
    cmake practice一文中安装可执行文件的方法
    slam学习资源
    js中对String去空格
    去当前时间的周一
    对sql初始化的值的处理
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/2808627.html
Copyright © 2020-2023  润新知