浅析三种控制访问符

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

1、访问控制符有三个分别是

公共权限 public成员,其在类内可以访问,类外也可以访问。 保护权限 protected成员,其在类内可以访问,类外不可以访问 子类也可以访问。 私有权限 private成员,其在类内可以访问,类外不可以访问 子类不可以访问。 比如对于类A:

class A
{
public:
	int a;
protected:
	int b;
private:
	int c;
};

image.png 当我们用A类在主函数中定义一个变量n ,在使用 对n使用 . 操作符时,会发现n成员只有a。也就是说明,公有成员是允许在类外访问的,而保护成员和成员是不被允许在类外访问的。其中保护成员protected和私有成员private的区别在子类中体现。

image.png

明显可以看出,在A的子类B中当我们使用私有成员c时,c的下面出现了红色波浪号提示错误,而保护成员b下方没有出现。说明在子类中我们可以使用父类的保护成员,而不能使用父类的私有成员。简单举个例子:说父类就是父亲子类就是儿子,父亲有公有成员name,所有人都可以访问;有保护成员car,父亲不愿意给外人开,但愿意给儿子开,所以儿子可以访问,也就是子类可以访问父类的保护成员;父类也有私有成员mima(密码),他不愿外人知道,也不愿儿子知道,即子类也不能访问自由成员。

2、私有成员可以通过公有成员函数进行访问

使用private可以自己控制读写权力

class People
{
public://公共接口
	//设置姓名
    void Setname(string n){
	name = n;
    }
    string Getname() {
	return name;
    }
    void Setage(int a) {
	if (a < 0 || a>150)
        {
            cout << "设置年龄不合法" << endl;
        }
        else{
            age = a;
        }	
    }
    int Getage(){
	return age;
    }
    void Setid(string i) {
	id = i;
    }
private:
    //可以自己设置读写权力
    string name;//可读可写
    int age;//只读
    string id;//只写
};

在类外不可以直接访问私有成员,但是可以在类中书写公有成员函数以实现对私有成员的读写访问。

int main()
{
	People p1;
	p1.Setage(13);
	p1.Setname("柯南");
	cout << "姓名:" << p1.Getname() << endl;
	cout << "年龄:" << p1.Getage() << endl;
}

image.png

3、私有成员可以能检测数据的有效性

仍然是上面的People类,我们知道,一般情况下人类的年龄一般都是在0~150岁之间,那我们在使用Setage()函数时就可以对数据进行检测。

int main()
{
	People p1;
	p1.Setage(1000);
	p1.Setage(13);
	cout << "年龄:" << p1.Getage() << endl;
}

image.png 通过这种方法就可以提高数据的有效性。