对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;}

现修改代码并进行验证:

编译环境及编译器为

对C++保护继承的访问控制进行验证






运行结果为5:

对C++保护继承的访问控制进行验证



现修改代码进行验证:

修改一:

源代码及运行结果:

#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;}

对C++保护继承的访问控制进行验证

编译成功,运行结果与课本代码一致,为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;}

对C++保护继承的访问控制进行验证


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

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

原文链接: https://www.cnblogs.com/ChenYilong/archive/2012/07/16/2808627.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    对C++保护继承的访问控制进行验证

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/55410

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午6:32
下一篇 2023年2月9日 上午6:32

相关推荐