
点击蓝字 关注我们

第二节 访问修饰符

数据封装是面向对象编程中的一个重要概念,它涉及将数据(变量)和操作数据的方法(函数)组合在一个单一的单元(类)中。封装通过使用访问修饰符(public、private、protected)来实现。一般来说,类的数据成员(变量)通常被声明为私有(private),而类的成员函数提供对这些私有数据的访问和操作。
class Student{private://私有成员public://公有成员protected://受保护成员};
公有成员(public)
public用于定义类的成员(变量和函数)的公共访问权限。成员声明为 public 时,它们可以在类的内部和外部被访问。这样的成员对于类的用户是可见的,可以被外部代码直接访问。
#include<iostream>using namespace std;class Student{public:int sid;string name;int score;};int main(){Student s1;s1.sid = 202101;s1.name = "Rose";s1.score = 99;cout << "学号:" << s1.sid << "\t"<< "姓名:" << s1.name << "\t"<< "分数:" << s1.score << endl;system("pause");return 0;}
sid,name,score是一个公共数据成员,可以在类的外部直接访问,可以不使用任何成员函数来设置和获取公有变量的值。
学号:202101 姓名:Rose 分数:99
私有成员(private)
private用于定义类的成员(变量和函数)的私有访问权限。当成员声明为 private 时,它们只能在类的内部被访问,外部的代码无法直接访问这些私有成员。
#include<iostream>using namespace std;class Student{int score;public:int sid;string name;void setscore(int sscore)// 公有成员函数,用于设置和获取私有数据{score = sscore;}int getscore(){return score;}};int main(){Student s1;s1.sid = 202101;s1.name = "Rose";s1.setscore(98);//需要使用成员函数设置成绩cout << "学号:" << s1.sid << "\t"<< "姓名:" << s1.name << "\t"<< "分数:" << s1.getscore() << endl;//使用成员函数得到成绩system("pause");return 0;}
Student类有三个数据成员(sid
、name
、score),其中score是私有数据。类外不能直接访问,我们提供了公有的成员函数用于设置和获取私有数据。这样,外部的代码不能直接访问这些数据成员,而是通过类的接口来进行访问,实现了数据封装。
学号:202101 姓名:Rose 分数:98
受保护成员(protected)
protected用于定义类的成员(变量和函数)的受保护访问权限。当成员声明为 protected 时,它们可以在类的内部被访问,同时也可以被派生类访问。但是,外部的代码无法直接访问这些受保护的成员。
#include<iostream>using namespace std;#include<string>class Dad {public:string PublicData;protected:string ProtectedData;private:string PrivateData;};class SON :public Dad{public:void setProtectedData(string SetData2){ProtectedData = SetData2;}string getProtectedData(void){return ProtectedData;}};int main(){SON son;son.setProtectedData("SetData2");cout <<son.getProtectedData() << endl;system("pause");return 0;}
ProtectedData是一个受保护的数据成员,只能在类的内部和派生类中访问。同样,setProtectedData和getProtectedData是受保护的成员函数,也可以在类的内部和派生类中被调用。
SetData2
下节中会具体讲到子类与父类在继承中的关系。
END
往期推荐




