c++中protected和private区别

先放结论

private:

1、仅可在 本类体中 被访问,类中的成员函数+友元函数

2、不能在外部、或被对象直接访问

2、不能被子类内成员函数访问、也不能被子类对象直接访问 

protected:

1、在本类中,和private用法一样:可被类内成员函数调用、不能再外部直接调用

2、能被子类内成员函数访问

3、不能在外部 被子类直接访问(形式child.baseProtectedMember)

 举例验证

特点1:

private、protected成员不能在外部直接访问

发现可选列表中只有public的b

特点2:

可在本类内 访问private、protected

特点3:

发现在子类内 的成员函数可以访问基类的proteced

(可选列表中出现了proteced的mv)

特点4:

发现子类内,不能访问基类的private成员(可选列表中 未出现m_base_private) 

所以也就不能在外部 通过子类对象调用子类成员函数 来改变父类private的值 

特点5:

发现在外部 子类对象不能直接访问基类的private、protected成员

(可选列表中 未出现protected的mv、private的m_Base_Private)

特点6:

在外部,子类对象可以通过调用子类的成员函数,来改变基类protected的变量。

其实是因为特点3子类成员函数可以访问基类proteced成员变量,所以才有了特点6能改变protected的值

完整代码

#include <iostream>
#include <string>

using namespace std;

class Parent
{
protected:
	int mv;
private:
	int m_base_private;
public:
	Parent()
	{
		mv = 100;
		m_base_private = 1022;
	}

	int value()
	{
		return mv;
	}
	int b;
};

class Child : public Parent
{
public:
	int addValue(int v)
	{
		mv = mv + v;
		return 0;
	}
};

int main()
{
	Parent p;

	cout << "p.mv = " << p.value() << endl;  //100
	
	Child c;

	cout << "c.mv = " << c.value() << endl;    //100

	c.addValue(1);

	cout << "c.mv = " << c.value() << endl;    //150

	return 0;
}

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值