分析测试百科网

搜索

喜欢作者

微信支付微信支付
×

C++之类的继承访问级别学习总结(二)

2020.9.29
头像

王辉

致力于为分析测试行业奉献终身

代码实现

#include <iostream>
#include <string>
using namespace std;
class Parent

protected:
   int mv;
public:
   Parent()
   {
       mv = 100;
   }
   
   int value()
   {
       return mv;
   }
};
class Child : public Parent

public:
   int addValue(int v)
   {
       mv = mv + v;    
   }
};
int main()
{  
   Parent p;
   
   cout << "p.mv = " << p.value() << endl;
   
    p.mv = 1000;    // error
   
   Child c;
   
   cout << "c.mv = " << c.value() << endl;
   
   c.addValue(50);
   
   cout << "c.mv = " << c.value() << endl;
   
    c.mv = 10000;  // error
   
   return 0;

运行结果:

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:9:9: error: ‘int Parent::mv’ is protected
    int mv;
        ^
test.cpp:37:8: error: within this context
     p.mv = 1000;    // error
       ^
test.cpp:9:9: error: ‘int Parent::mv’ is protected
    int mv;
        ^
test.cpp:47:7: error: within this context
    c.mv = 10000;  // error

注解:这里我们把父类的属性private修改成protect,这里我们注意到在子类里面的方法中是可以使用父类中的属性mv了,只不过在int main()函数中,使用父类和子类定义的对象,均不可以对父类中的属性mv进行访问,这一点要注意。

3、为什么面向对象中需要protect?

我们还是用生活中的例子来理解,每个人的个人隐私,是不能泄露的,也就是我们c++中的private关键字;而你身上穿的衣服,每个人都可以知道,也就是c++中的public关键字;最后我们的protect关键字,为啥c++中会需要它,我想还是跟生活中有关(所以说,面向对象的编程,非常贴近生活),比如说,家庭开会,有些事情就不能让外人知道,但是自己家人就可以知道,所以这跟protect关键字的用法非常像,也就是说,protect关键鉴于private和public之间。


互联网
文章推荐