在C++类的学习过程中,我们在需要对某个数据成员进行访问限定时需要用到访问限定符,常见的访问限定符有:public,private,protected和default。
在类的定义中,若没有对数据成员进行限定符限定,其默认的访问权限为default,而public和private又有什么区别呢?
public:既可以在类内引用和修改,也能在类外引用和修改
#include<bits/stdc++.h>
using namespace std;
class Ccube{
public:
int a,S;
int area(int a){
S=a*a*a;
cout<<"area= "<<S<<endl;
return 0;
}
};
int main(){
Ccube S1;
cin>>S1.a;
S1.area(S1.a);
S1.a=10;//改变类中a的值
S1.area(S1.a);
}
private:类的private成员只能被该类的成员函数访问(也能被该类的友元函数访问),但不能被类外函数引用和访问,也不能修改该数据成员的值。即类内(包含友元)可以访问,类外不可访问
所以要想访问此类数据成员,我们需要在类内定义一个与类外对接数据的接口。
#include<bits/stdc++.h>
using namespace std;
class Ccube{
private:
int a,S;
public:
int x;
int exchange(int x){
a=x;
}
int area(int a){
S=a*a*a;
cout<<"area= "<<S<<endl;
return 0;
}
};
int main(){
Ccube S1;
cin>>S1.x;
S1.area(S1.x);
}
(但需要注意:的是在类内对数据进行赋值的时候只能用构造函数,public和private里的赋值无效,若没有用构造函数,编译器会默认执行一个空的构造函数,这个函数会给所有的数据成员赋初值为0)
protected:类的protected数据成员只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。
private和protected区别:这两种访问权限的特点是类内都可以访问,类外均不可访问(类外的友元除外);其区别在于继承时,protected权限下的数据成员可以被子类的成员函数访问,而private则是完全封闭了类外访问的所有权限。连子类也不能引用该权限下的数据成员